使用MySQL PDO时的分段错误

时间:2012-11-27 04:50:44

标签: php mysql pdo laravel

我刚刚开始在Laravel的新网站上工作,而且我遇到了与MYSQL(版本5.5.25a)数据库连接的问题。 mysql服务器位于同一本地网络上,但位于与Web服务器(OSX服务器)不同的计算机上。这个设置在Codeigniter,YII,直接PHP等方面对我来说很好。

我使用我的数据库凭据设置了Laravel的/config/database.php,但是只要它在使用Laravel的PDO数据库类建立数据库连接的页面上,该站点就会超时。它给了我铬中可怕的Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.错误。

如果我输入的凭据不正确(密码/用户名/ dbname错误),Laravel会给我一个真正的MYSQL错误消息SQLSTATE[28000] [1045] Access denied for user...,所以它似乎可以正常地传达服务器。

如果我使用mysqli进行快速而脏的数据库调用并使用chromePHP记录结果,那么一切似乎都能正常工作,它会从数据库返回正确的行数,没有超时,没有问题。

$mysqli = new mysqli('192.168.1.178', 'username', 'password', 'dbname');

if ($mysqli->connect_error){
    die ("Connect error: " . $mysqli->connect_error );
}

if ($result = $mysqli->query("SELECT username FROM user LIMIT 10")) {
    ChromePhp::log($result->num_rows);
    /* free result set */
    $result->close();
}

更新

我检查了日志,我从mysql中得不到任何内容,但apache日志在超时时显示以下错误:

child pid 60418 exit signal Segmentation fault (11)

我还注意到phpinfo()显示PDO Client API版本设置为mysqlnd 5.0.7-dev - 091210 - $Revision: 300533,我想知道客户端版本和MYSQL服务器版本之间的这种不匹配是否会导致问题?


当我尝试将PDO与mysql一起使用时,为什么php / mysql会超时?

2 个答案:

答案 0 :(得分:1)

您有2个环境CLI&浏览器。两者都应该使用你的ip或“localhost”,但根据我的经验,一个环境在数据库配置中使用你的IP,另一个在数据库配置中使用“localhost”。

答案 1 :(得分:1)

在尝试使用Laravel 4测试版时,我遇到了此错误的问题。从命令行运行迁移时,我会看到Segmentation fault: 11

事实证明,我的问题是安装 MAMP 的副作用。 php MAMP 的版本仅提供在浏览器中运行。开箱即用,OS X附带了它自己的php版本。这是在命令行中使用php时将运行的OS X版本。

快速解决方法是将MAMP php目录添加到.profile或.bash_profile文件中。有关如何执行此操作的更好指南here