2014-01-08 179 views
1

我是新來的PHP的PDO並得到了與我的數據庫類的功能有點問題:「?」PHP PDO bindValue()失敗

function set($query, $args = array()) { 
try { 
    $query = $this->rs->prepare($query); 

    $x = 1; 
    foreach($args as $arg) { 
     $query -> bindValue($x, $arg); 
     $x++; 
    } 

    $query->execute($args); 
} 
catch(PDOException $e) { 
    print_r($e); 
} 
} 

它應該自動綁定在查詢中將它們的值存儲在數組$args中。

例子:

$db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES('?','?','?','?','?')", array(
    "bla", 
    "bla2", 
    "bla3", 
    "bla4", 
    "bla4" 
)); 

但它不工作。在數據庫中,所有列都包含那些愚蠢的問號。哪裏有問題?

+0

您是否嘗試過?沒有引號? –

+0

旁註:'to'是一個保留字,需要用反引號包裹。 http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html在你的'(日期,關注,發送者,味精)' –

回答

1

您已經引用了您的問號,因此數據庫只能看到包含單個?的文字字符串,而不是佔位符標記(問號)。只需使用問號而不用引用它:系統會自動使用相關數據類型的正確語法。

+0

啊,我會試試這個。如果這真的起作用,我做了一個非常愚蠢的錯誤...再次... 編輯:它真的有效!非常感謝! :D – webdesigner97

1

嘗試從查詢中刪除引號:

$db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES(?,?,?,?,?)", array(
    "bla", 
    "bla2", 
    "bla3", 
    "bla4", 
    "bla4" 
)); 

如果你只輸入字符串,那麼你可以用第三個參數迫使這bind_valuePDO::PARAM_STR

$query -> bindValue($x, $arg, PDO::PARAM_STR); 
+0

刪除''作品:D – webdesigner97

1

它應該是像外出報價'?'即它應該是?

$db -> set("INSERT INTO messages(date,regard,sender,to,msg) VALUES(?,?,?,?,?)", array(
"bla", 
"bla2", 
"bla3", 
"bla4", 
"bla4" 
)); 
+0

是的,這工作:D我總是犯這樣愚蠢的錯誤...... – webdesigner97