将mysql与pdo_mysql连接,在windows中成功运行,但在CentOS 5.8中失败

将mysql与pdo_mysql连接,在windows中成功运行,但在CentOS 5.8中失败,mysql,pdo,centos,database-connection,Mysql,Pdo,Centos,Database Connection,我有两台电脑,一台安装Windows7,另一台是CentOS 5.8 在世纪 我使用yum命令安装httpd(apache2.2)、php5.3.3和mysql yum安装httpd yum安装php53 yum安装pdo yum安装php53-mysql 首先我检查phpinfo,pdo,pdo_mysql是否成功扩展 然后我还检查了CentOS终端中的php-m,也扩展了pdo和pdo_mysql 我在Windows7和CentOS之间运行相同的代码 窗口成功,但centos失败

我有两台电脑,一台安装Windows7,另一台是CentOS 5.8


在世纪

我使用yum命令安装httpd(apache2.2)、php5.3.3和mysql

  • yum安装httpd
  • yum安装php53
  • yum安装pdo
  • yum安装php53-mysql
首先我检查phpinfo,pdo,pdo_mysql是否成功扩展

然后我还检查了CentOS终端中的php-m,也扩展了pdo和pdo_mysql


我在Windows7和CentOS之间运行相同的代码

窗口成功,但centos失败

两个文件,db.php和dbtest.php

下面是db.php:

<?php

    class DB
    {
        private $conn;

        #### construct ####
        public function __construct( $dsn , $db_user , $db_password , $showError = false )
        {                       
            try
            {               
                $this->conn = new PDO( $dsn , $db_user , $db_password );

                if( $showError ) // set error information show or not. 
                {
                    $this->conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
                }
                else
                {
                    $this->conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
                }

                $setUtf8 = $this->conn->prepare( 'set names utf8' ); // set encoded by utf8
                $setUtf8->execute();
            }
            catch( PDOException $err )
            {
                return false;
            }
        }
    }
?>
在CentOS中转储,结果是:

object(DB)#1 (1) { ["conn":"DB":private]=> object(PDO)#2 (0), { } }
object(DB)#1 (1) { ["conn":"DB":private]=> NULL }
谁能告诉我为什么连接在CentOS中失败


编辑时间:2012/10/24 16:10(亚洲/台北)

对于测试多个小时,我猜是php pdo有问题

因为在我的局域网中,我可以通过CentOS终端连接任何3306端口的mysql

但在php pdo_mysql类中,我无法链接任何mysql(即使是CentOS local的mysql)

那么…如何检查我的pdo_mysql扩展是否正常运行


PS:对不起,我的英语很差:(

Linux上的PHP/PDO将尝试通过套接字进行本地连接。您可以在
PHP.ini
中的
PDO\u mysql.default\u socket
属性中配置此套接字的位置


您当然会遇到5.3.9中修复的问题(我想),因此我建议您升级到5.3.3版本之后。

首先,感谢您回答我的问题:)


关注socket,我已经尝试了两种方法:

1) 正如您所说,我修改php.ini,添加pdo_mysql.default_套接字

然后重新启动httpd服务,但pdo-mysql连接仍然失败

2) 我修改了dbtest.php第3行(#3),这是DSN的一部分

Original=>“mysql:dbname=pdotest;port=3306;host=192.168.1.127”
新的  => “mysql:unix_socket=/var/lib/mysql/mysql.sock;dbname=pdotest;port=3306;host=192.168.1.127”

,但连接仍然失败


我还尝试了原始的mysql_连接测试链接数据库,它的工作

根据您的建议,我将在稍后将php更改为另一个版本(可能是5.4.8或低于5.3.3),然后发布结果


谢谢

浪费了很多时间…我终于找到了解决办法


当我看到如果将
$showError
设置为
true
,会发生什么情况时,请不要丢弃异常。丢失
try
catch
并释放异常。还有,为什么选择PHP5.3.3?
object(DB)#1 (1) { ["conn":"DB":private]=> NULL }