我有两台电脑,一台安装Windows 7,另一台是CentOS 5.8
在CentOS ......
我使用yum命令安装httpd(apache2.2),php5.3.3和mysql。
首先我查看phpinfo,pdo,pdo_mysql是否成功扩展,
然后我也检查了CentOS终端中的php -m,也扩展了pdo和pdo_mysql。
我在Windows 7和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;
}
}
}
?>
这是dbtest.php:
<?php
require_once( "db.php" );
$link_test = new DB( "mysql:dbname=pdotest;port=3306;host=192.168.1.127", "root" , "123456" );
var_dump($link_test);
?>
在Windows中转储时,结果为:
object(DB)#1 (1) { ["conn":"DB":private]=> object(PDO)#2 (0), { } }
在CentOS中转储,结果是:
object(DB)#1 (1) { ["conn":"DB":private]=> NULL }
谁能告诉我为什么连接在CentOS中失败?
编辑于2012/10/24 16:10(亚洲/台北)
对于测试很多小时,我猜是php pdo有问题...
因为在我的局域网中,我可以通过CentOS终端连接任何3306端口的mysql
但在php pdo_mysql类中,我无法链接任何mysql(即使是CentOS本地的mysql)
所以......如何检查我的pdo_mysql扩展是否正常运行?
PS:对不起,我的英语很差:(
答案 0 :(得分:0)
Linux上的PHP / PDO将尝试通过套接字连接以进行本地连接。您可以在pdo_mysql.default_socket
中的php.ini
属性中配置此套接字的位置。
你当然会遇到Bug #60155,这是在5.3.9(我认为)中修复的,所以我肯定会建议升级到5.3.3以后版本。
答案 1 :(得分:0)
首先,谢谢你回答我的问题:)
专注于socket,我已经尝试了两种方法:
1)就像你说的,我修改php.ini,添加pdo_mysql.default_socket
然后重启httpd服务,但是pdo mysql连接仍然失败
2)我修改了dbtest.php第3行(#3),这是DSN的一部分
原件=&GT; “MySQL的:DBNAME = pdotest;端口= 3306;主机= 192.168.1.127”
新=&gt; “MySQL的:unix_socket =的/ var / lib中/ MySQL的/的mysql.sock; DBNAME = pdotest;端口= 3306;主机= 192.168.1.127”
,但连接仍然失败
我也尝试使用原始的mysql_connect来测试链接数据库,这是工作!
根据你的建议,我会稍后将php更改为另一个版本(可能是5.4.8或更低,然后是5.3.3),然后发布结果
谢谢!
答案 2 :(得分:0)
浪费了很多时间......最后我得到了解决方案!!
当我看到this question&lt;&lt;点击链接查看问题
这个答案解决了我的问题。
Selinux默认设置为关闭httpd_can_network_connect和httpd_can_network_connect_db
打开它吧! PDO连接将正常运行:)
命令:
setsebool -P httpd_can_network_connect = 1
setsebool -P httpd_can_network_connect_db = 1
谢谢Michael Berkowski