2013-03-09 73 views
4

在開發過程中,我設置了error_reporting(-1);,所以我確信每個語法錯誤都會由PHP顯示。這是,例如PDO bindParam是否允許不存在的變量?

echo $ttt; 
當然

它給

Notice: Undefined variable: ttt in ... 

在這片碼(表示在MySQL表中的行的一些類的一部分):

public function delete(){ 
// ... 
    $sth=$dbh->prepare('DELETE FROM tobjects WHERE IdObject=:id'); 
    $sth->bindParam(':id',$this->fid,PDO::PARAM_INT); 
    $sth->execute(); 

我錯誤地輸入了現在的$this->fid,並且沒有發生刪除,甚至沒有發現錯誤,我花了很長時間找到它。

$dbh設置別處:

$dbh=new PDO("mysql:host=XXXX;port=XXXX;dbname=XXXX",$db_user, 
$db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

難道我做錯了什麼或怎麼可能這是給沒有錯誤?

+0

*「我是否做錯了什麼?」*,以及您將錯誤模式設置爲異常,但不使用任何try/catch塊來捕獲這些異常... – 2013-03-09 22:21:06

+0

這不是PDO,應該給出關於這個的錯誤。正如在你的回聲聲明中,應該報告它是php。 – 2013-03-09 22:21:54

+0

是的,但爲什麼PHP不顯示通知:未定義的變量? – Voitcus 2013-03-09 22:23:37

回答

4

您看不到通知,因爲參數bindParam的參數被傳遞。

function test(&$var) { 
    // var may also be undefined 
    var_dump($var); 
} 

test($undef); 

這不會引發任何錯誤。 Doc:What References Do

+0

謝謝你的幫助。 – Voitcus 2013-03-09 22:28:16