2014-04-13 102 views
0

我已經看到類似於我的幾個問題,但沒有使用數組循環來插入表列和值。我對PDO相當陌生,所以在如何完成這項工作上我有點失落。使用數組循環的PDO插入

我正在創建一個表單,學生輸入多個選擇題的答案,並將其答案存儲在數據庫中。有68個問題。現在,我硬編碼每列和值是這樣的:

$stmt = $DBH->prepare("INSERT INTO my_table (student, q1, q2, etc...) 
    VALUES (?, ?, ?, etc...) "); 
$stmt->execute(array($student_name, $answer[1], $answer[2], $answer[3], 
    etc... through $answer[68])); 

這工作得很好,但必須有要做到這一點,而無需輸入每個實例都更簡單的方法。我希望能夠遍歷表列(q1等)的數字以及答案變量數組。我只是不知道如何解決這個問題。

即使自動擁有正確數量的佔位符問號 - 甚至可能嗎?

+2

問題在於你的數據庫設計:你不應該有68列包含相似的數據,你應該有一個單獨的表和每行的每個問題。 – IMSoP

+0

您可以編程方式構建'?'字符串;只要你完全控制了你正在建立的文本(在這種情況下只是',?'),就沒有注入風險。 – Dave

+0

你也可以使用'?'來轉義列名。我不確定它的可移植性如何,但在MySQL中,您甚至可以在表名中使用'?'! (不要那樣做) – Dave

回答

0

儘管@IMSoP在較大的方面是正確的,但在我看來,這裏所需要的只是一個帶有$ student_name的數組,後跟所有的$ answer數組。

$stmt->execute(array_merge(array($student_name), $answer)));

做到這一點。如果你想要一些但不是全部的$答案,你可以使用array_slice。