2017-02-21 88 views
-1

我想綁定一個關聯數組,通過一個foreach循環,但我沒有得到它以某種方式工作。我得到這個錯誤:pdo bindParam與關聯數組

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

這裏是代碼。該變種$columns$values來自陣列爲好,操縱,其接受他們像x, x, x:x, :x, :x

$stmt1 = $conn->prepare("INSERT INTO data($columns) 
VALUES ($values)"); 
foreach ($array as $key => $value) 
{ 
    $key = ":" . $key; 
    $stmt1->bindParam($key, $value); 
    $stmt1->execute(); 
} 

我敢肯定的列macthing鍵在數組中。

編輯:更多的代碼

$values = ''; 
$columns = implode(',', $array); 
foreach($array as $key) 
{ 
    $values .= ":" . $key . ","; 
} 
$values = substr($values , 0, -1); 
+0

代碼不足以提供正確的判斷。至少顯示'$ values'。 –

+0

@ PaulT.Rawkeen對不起,我用代碼編輯了這個問題 – SC92

+0

'$ array'仍然是一個謎。 –

回答

6

出現此錯誤是因爲您在每次迭代時都執行查詢,但是由於錯誤而首先停止。當它在第一次迭代中執行時,實際上只綁定了一個變量和一個令牌,因此計數錯誤並且出現錯誤。您只需要將執行移出循環

foreach ($array as $key => $value) { 
    $key = ":" . $key; 
    $stmt1->bindParam($key, $value); 
} 
$stmt1->execute(); 
+0

謝謝,這工作 – SC92

+0

歡迎你 – Fabio

-2

要調用與每個迭代執行的,所以它只有一個變量實際上束縛射擊。

而不是循環的只是通過你的數組執行

$stmt1 = $conn->prepare("INSERT INTO data($columns) VALUES ($values)"); 
$stmt1->execute($array); 

而且,你的代碼是prone to sql injection through column names

+0

感謝您的鏈接! – SC92