2009-09-18 88 views
0

我第一次嘗試使用PHP中的PDO。我認爲PDOStatement-> bindParam()將是一種很酷的方式來設置我傳遞給sql查詢的值的數據類型。但不知何故,它不適合我。例如,我在bindParam調用中將變量的類型設置爲INT。但即使傳遞純字符串值,它仍然不會拋出錯誤。也許我做錯了什麼。這裏是代碼片段..在PHP中,PDO :: PDOStatement-> bindParam()是否按預期工作?

$query = "select * from PDO_TABLE where A_COLUMN = :test1 or B_COLUMN = :test2"; 

$test1 = '0'; 
$test2 = 'a'; 
$preparedStatement = $conn->prepare($query); 

echo $preparedStatement->bindParam(':test1', $test1, PDO::PARAM_INT); 
echo $preparedStatement->bindParam(':test2', $test2, PDO::PARAM_INT); 

$preparedStatement->execute(); 

我是否正確地做了一切?這不是應該爲參數test2拋出錯誤?

回答

2

PDO不會拋出異常或引發錯誤,但至多會將該參數轉換爲整數/長整型。 例如在pdo_stmt.c:

if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) { 
    convert_to_long(param->parameter); 
} 

即如果已註冊的參數作爲PDO_INT但變量持有一個布爾PDO的布爾轉換爲int /長。

+0

ohh..k...有辦法知道什麼查詢最終被用來從數據庫中獲取結果。即我可以知道有問題的變量最終傳遞給查詢的值是什麼? – Chantz 2009-09-18 17:03:44