phpmyadmin 使用 mysqli 连接,但我的 php 使用 mysqli 出错了
Posted
技术标签:
【中文标题】phpmyadmin 使用 mysqli 连接,但我的 php 使用 mysqli 出错了【英文标题】:phpmyadmin using mysqli connects, but my php using mysqli errors out 【发布时间】:2010-12-31 15:06:21 【问题描述】:这快把我逼疯了!我得到了经典的“无法通过套接字'/var/run/mysql4d/mysql4d.sock' (13) 连接到本地 MySQL 服务器”。
到目前为止,我发现的一切都告诉我我的设置应该没问题(例如,在 php.ini 和 my.cnf 中定义套接字等)。更糟糕的是... phpmyadmin 与我在自己的 php 中使用的相同 un/pw 一起工作。所以显然可以连接,但我搞砸了
我尝试从 phpmyadmin 对连接进行逆向工程,但几个小时后因为过于复杂而放弃了它。
谁能给点建议?
我的配置:Ubuntu 9.10 (Karmic)、Apache 2.2、PHP 5.2.6、MySQL 4.1.22(出于遗留应用的原因)。
my.cnf (/var/lib/mysql4/my.cnf):
[客户] 端口 = 3306 套接字 = /var/run/mysql4d/mysql4d.sock [mysqld] 端口 = 3306 套接字 = /var/run/mysql4d/mysql4d.sock
php.ini (/etc/php5/apache2/php.ini):
[MySQL] mysql.default_socket = /var/run/mysql4d/mysql4d.sock [MySQLi] mysql.default_socket = /var/run/mysql4d/mysql4d.sock
使用 mysql 代替 mysqli 时同样的问题,顺便说一句。
编辑: 我应该提到,我已经安装了 mysql4 以及 php 和 mysql 的 ubuntu 默认安装,以便与旧版应用程序一起使用,而我在连接时遇到了麻烦。我试过这个:
ini_set('mysql.default_socket', '/var/run/mysql4d/mysql4d.sock');
现在连接成功,但所有查询都返回空集。 (沮丧地哭泣)
【问题讨论】:
我可能错了,但不是错误 13“权限被拒绝”吗?会不会是你没有访问socket的权限? 【参考方案1】:这听起来像是/var/run/mysql4d/mysql4d.sock
中的权限问题。您以什么用户身份运行它?权限是否正常?在文件系统级别?
如果你用谷歌搜索错误消息,你会发现很多人都遇到了这个问题,这总是一个权限问题,有时是因为激活了SELinux。查看this thread 了解一些可能的解决方案。
【讨论】:
嘿Pekka,谢谢你的提示!但是我的机器上没有安装 selinux。唉,线程上没有任何帮助。如果是权限问题,也许我的 apache.conf 写得不好...... 嗯,太糟糕了!套接字真的存在吗?你检查过它的权限吗?是否允许 Apache 用户访问它? 是的,套接字存在:srwxrwxrwx 1 mysql4 mysql4 0 2010-01-01 14:15 /var/run/mysql4d/mysql4d.sock 必须允许 Apache 访问它,否则 phpmyadmin 将无法工作. 好的。是否可以选择绕过套接字?如果是,请尝试连接到 127.0.0.1 而不是 localhost(请参阅 de2.php.net/manual/en/function.mysql-connect.php 为什么中的“注释”)。也许这有帮助。我现在休息到明天。祝你好运! 啊哈!我尝试用 mysqli 而不是 mysql 覆盖使用 tcp/ip,它突然开始工作了! mysqli_connect('127.0.0.1', $un, $pw, $db, 3306);它不与 mysql_connect 一起工作(这很有趣,因为文档在 mysql_connect 页面上提到了它,但不是 mysqli_connect)。感谢您的所有帮助,Pekka!以上是关于phpmyadmin 使用 mysqli 连接,但我的 php 使用 mysqli 出错了的主要内容,如果未能解决你的问题,请参考以下文章
为啥登陆phpadmin的界面提示缺少mysqli扩展,请检查php配置
mysqli_real_connect(): (HY000/1045): Access denied for user 'phpmyadmin'@'localhost' (使用密码: YES)