2012-11-27 90 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