当前位置:  开发笔记 > 编程语言 > 正文

PHP交互式mysql()不起作用,但mysqli()正在工作; 为什么?

如何解决《PHP交互式mysql()不起作用,但mysqli()正在工作;为什么?》经验,为你挑选了0个好方法。

概要:转储/恢复后,无法再从Web应用程序连接到MariaDB.这似乎是在MariaDB中处理PHP mysql()和mysqli()接口的方式之间的一些区别.

MariaDB 10.1.8在MacOS X 10.6.8(Snow Leopard)上,PHP 5.3.8和Apache 2.2.24.

由于磁盘驱动器出现故障,我遇到了"数据库腐烂"的情况,一些InnoDB表变得无法访问,最后服务器崩溃了.我按照服务器错误日志条目指向的网页中的说明进行操作,并且能够让它运行,只读,使用"mysqld --innodb_force_recovery = 2".(1级仍然崩溃,我不敢尝试3级.)

在"force_recovery"模式下,我对所有数据库(11 GB)进行了逻辑(SQL代码)转储,重命名了错误的数据目录,并运行"scripts/mysql_install_db.sh"来初始化空数据目录.然后我加载了逻辑备份,只有很小的问题.

现在它变得令人费解.我可以使用各种工具访问数据库,包括mysql CLI,phpMyAdmin,Sequel Pro,Valentia等.

但我无法通过我托管的任何网站进入数据库,包括几个版本的MediaWiki和几个本土图像库的实例.它在mysql_connect()中失败,登录凭据通过mysql CLI工作.但phpMyAdmin使用相同的登录凭据工作!

所以我浏览了phpMyAdmirn代码,发现它使用的是mysqli(),而破碎的网页应用程序似乎正在使用mysql().phpMyAdmin有一个配置变量来控制它; 我把它从"mysqli"改为"mysql",它就破了.将其改回"mysqli",它再次起作用.

我没有改变任何PHP代码.我没有改变任何apache设置.我没有改变/etc/my.cnf.我没有改变/etc/php.ini.我没有更改任何登录凭据.唯一改变的是转储,重新初始化和恢复所有数据库.

我想也许一些神奇的MySQL系统变量设置没有通过转储/恢复周期.

我做了phpinfo(),它表明mysqli()正在使用正确的套接字:/tmp/mysql.sock,但是mysql()正在使用/var/mysql/mysql.sock,这在/etc/php.ini中没有启用./ var/mysql中有一个指向/tmp/mysql.sock的符号链接,这让我觉得我之前已经走过了这条道路......我试着把它变成一个硬链接; 仍然没有快乐.

我运行了"php -info",实际上,编译后的套接字是/var/mysql/mysql.sock.所以我在/etc/my.cnf中放了"socket =/var/mysql/mysql.sock",删除了/ var/mysql中的符号链接,并重新启动了mysql和apache.套接字在/ var/mysql中.现在,使用mysqli()的web应用程序不再有效,但使用mysql()的应用程序也不行!

所以我很困惑.特别是因为在我进行了mysql数据目录的转储/初始化/恢复之前它一切正常.

提前感谢您提供的任何建议!

(是的,我知道mysql()已被弃用,但我确实预先设置了"PHP 5.3.8".感谢所有没有回答问题的人指出不应该使用弃用代码进行新开发.现在,如果你这么聪明,我们试着回答这个问题吧!我有遗留的代码来维护!)

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有