2012-02-18 68 views
1

我期待以下代碼在PHP中產生錯誤,但它運行時沒有任何錯誤跡象。PHP-MySQL沒有關於SQL錯誤的錯誤消息

<?php 

error_reporting(E_ALL); 
ini_set('display_errors','On'); 

$link = mysql_connect('localhost','JUST_ANY_TEXT EVEN WITH SPACES', ''); 

mysql_select_db('JUST_ANY_TEXT EVEN WITH SPACES', $link); 

echo 'LINK RESULT = '.($link?'OK':'ERROR'); //THIS PRINTS: LINK RESULT = OK 

echo mysql_query("SELECT INVALID_TEXT FROM TABLE_THAT_DOES_NOT_EXISTS_ANYWHERE PLUS ANY TEXT 3[t3p36g333 3 4638343´tp4oy0i9u54t-9u´089hwpjoeg~,ç"); 
+0

它是否至少顯示警告? – Ryan 2012-02-18 15:37:55

+0

不,它沒有。 – DMF 2012-02-18 15:45:24

回答

2

這按預期工作。如果你看看official documentation,你會發現大部分函數都有一個返回值。你應該檢查返回值以確保一切正常。

此外,這些傳統mysql_*功能相當過時。我建議使用PDO package

指出代碼中的直接錯誤。你應該這樣使用它:

$success = mysql_select_db('JUST_ANY_TEXT EVEN WITH SPACES', $link); 
if (!$success) 
    die ('Error selecting the database!'); 
+0

mysql_connect和mysql_select_db返回TRUE(mysql_connect返回資源ID)。只有mysql_query結果爲FALSE。 – DMF 2012-02-18 15:42:00

+0

我同意,請嘗試使用mysqli函數 – AgnosticDev 2012-02-18 15:44:21

+0

@DMF請參閱我爲正確使用而添加的示例。 – vbence 2012-02-18 15:47:52

1

對於請求mysql_query()你必須檢查的mysql_query(的結果),並使用mysql_error()來獲得MySQL的錯誤消息:

$query = "invalid query"; 
$result = mysql_query($query) or trigger_error(mysql_error()." ".$query); 

然而,的mysql_connect ()應該在錯誤憑證的情況下產生錯誤。
您確定您可以看到發生的錯誤嗎?無論PHP錯誤?

+0

是的,我確定我可以看到任何其他的PHP錯誤。 – DMF 2012-02-18 15:53:39

+0

然後檢查您的憑據,如果他們真的是這樣的「任何文本與空間」。 mysql_connect和mysql_select_db都會引發常規的PHP錯誤。但是,如果你不確定,你仍然可以使用mysql_error()。 – 2012-02-18 15:55:34

+0

現在我意識到mysql不會爲用戶名參數拋出錯誤。其他參數(如servername和password)在使用錯誤憑證時會引發錯誤。 – DMF 2012-02-18 16:03:00