2013-02-28 102 views
4

我發現,當我試圖運行使用參數更新查詢,我收到提示PDO PostgreSQL的綁定錯誤

inconsistent types deduced for parameter

也許這是因爲目標字段的類型(字符改變),一切與文字列類型正常工作。但是我不想僅僅因爲這個而改變列類型。然後我被告知我應該直接傳遞params(使用bindValue或bindParam,確定每個值的類型),而不是發送params數組到執行方法。

但是,當我這樣做,我收到提示

ERROR: bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000001" requires 1

測試代碼是

$Stmt = $DB->prepare("SELECT * FROM test_table WHERE test_field=:test_field"); 
$Stmt->bindValue(':test_field', 'test', PDO::PARAM_STR); 
$Stmt->execute(); 
var_dump($DB->errorInfo()); 

因此,據瞭解,結合並不在所有的工作。或者我做錯了。 但也許有辦法解決它?

我使用PostgreSQL 9.2.3,libpq 8.4.16運行PHP 5.4.12。

回答

5

嗯,看來唯一的辦法就是要投足文本值的文字是這樣的:

update test_table set test_field = :test_field::text 

約不一致的類型,否則錯誤發生。

+0

您能否提供更多關於如何在PHP中完成以及爲什麼需要它的信息? – BadPirate 2016-09-07 20:51:05

0

我做這種方式:

$stmt = $DB->prepare("SELECT * FROM test_table WHERE test_field=:test_field"); 
$stmt->execute(array(":test_field" => 'test')); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
if($result) 
{ 
    return $result['id']; 
    // Or whatever you're trying to get. 
} 
return null; 

你只需要在參數在執行功能的陣列扔,無需添加專線的結合。

告訴我,如果它適合你(或不)。

+0

問題是,當我嘗試像這樣更新表時,出現了不一致類型的錯誤 - set field_name =:field_name。 – 2013-02-28 13:04:17