2012-11-27 89 views
0

我刚刚开始在Laravel的一个新网站上工作,而且我在连接到MYSQL(版本5.5.25a)数据库时遇到问题。 mysql服务器位于同一本地网络上,但位于与Web服务器(OSX服务器)不同的计算机上。很长一段时间,这种设置在Codeigniter,YII,PHP等等中一直适用于我。使用MySQL PDO时的分段错误

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

如果我输入的凭据不正确(错误的密码/用户名/数据库名),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(); 
} 

UPDATE

我查了日志,我从MySQL获得什么,但Apache日志显示以下错误,当它超时:

child pid 60418 exit signal Segmentation fault (11) 

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


为什么当我尝试在mysql中使用PDO时,php/mysql会超时?

+0

似乎我不是唯一有这个问题的人,它可能是特定于我正在使用的苹果设置。 https://discussions.apple.com/thread/2141886?threadID=2141886&tstart=0 – Jeemusu

+0

web服务器上的'phpinfo()'表明PDO客户端API版本设置为'mysqlnd 5.0.7-dev - 091210 - $修订版:300533',我想知道这是否会造成问题? – Jeemusu

回答

1

您有2个环境CLI &浏览器。两者都应该与你的IP或“本地主机”一起工作,但根据我的经验,一个环境可以在数据库配置中与IP协同工作,而另一个环境可以在数据库配置中与“本地主机”协同工作。

+0

我的网站位于虚拟网域,因此我通过浏览器通过“http:// some-made-up-address.dev”连接到它。正如你在上面看到的,我通过IP地址连接到数据库,因为它不在localhost的范围内。这种设置并没有在其他框架中造成任何问题。如果我将相同的凭证输入到codeigniter或yii设置中,它将连接到数据库。 – Jeemusu

+1

可能是相关http://stackoverflow.com/questions/6538484/php-or-mysql-crash-when-retrieving-a-big-database-record-5mb(Laravel正在使用PDO MySQL)。 – crynobone

1

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

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

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