2015-09-25 22 views
0

我想爲我的PDO查詢在文件上設置數組containsig所有必需的參數,並且這些查詢中的第一個是僅使用一個參數的SELECTPDO:在選擇時綁定數據通過陣列

$data = array(
      'us_id' => $_POST['us_id'], 
      'us_credits' => $_POST['us_credits'], 
      'us_access' => $_POST['us_access'] 
     ); 

$selectUsers= "SELECT * FROM ws_users WHERE us_id= :us_id"; 

$statementSelectUsers = $pdo->prepare($selectUsers); 
$statementSelectUsers->execute($data); 
$result = $statementSelectUsers->fetch(PDO::FETCH_ASSOC); 
$us_fk_ui_id = $result['us_fk_ui_id']; 

上執行,一個致命錯誤出現了:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\wamp\www\waisap\actions\ad_updateUserInfo.php on line 25

第25行是$statementSelectUsers->execute($data);

據我瞭解到,在PDO一個SELECT查詢不需要​​,但如果沒有執行查詢,我不能將包含在我的數組中的綁定數據傳遞給查詢的佔位符。這是錯誤的原因嗎?如何傳遞數組以應用於我的SELECT查詢的佔位符?

回答

1

讓我重複我告訴你在對方的回答5分鐘前:

array keys have to match placeholders in the query. If your queries have different sets of placeholders, you will need different arrays as well.

所以,這是對這個問題的原因。

As far as I've learned, a SELECT query on PDO does not need to execute(),

你已經學會了錯誤。你必須執行已經準備好的一切。

首先,創建$data數組只有一個元素,並用它來SELECT

$data = array('us_id' => $_POST['us_id']); 
$stmt = $pdo->prepare("SELECT us_fk_ui_id FROM ws_users WHERE us_id= :us_id"); 
$stmt->execute($data); 
$us_fk_ui_id = $stmt->fetchColumn(); 

爲以後的查詢添加其他項目這個數組

+0

我誤解你的解釋。它不僅需要具有相同的佔位符(從字面上看,匹配的佔位符),它需要相同的佔位符集合。我的錯誤,謝謝 – Biomehanika