2017-09-02 47 views
1

在您複製您的問題之前,我閱讀了與我的問題有關係的所有答案。我試圖插入具有關聯數組數據例如使用PDO插入關聯數組的數據

<?php 
$data = array(
     'fname'=>'joe', 
     'lname'=>'sina' 
); 
foreach ($data as $key=>$value) { 

} 
?> 

我想這樣

/*insert into tblname($key)values($value); 
finally the query will appear correctly format */ 
insert into tblname('fname','lname') values('joe','sina'); 
+0

使用' '\''。 implode('\'',array_keys($ data))。 '\'';'創建列表 –

+0

使用'count($ data)'來獲得綁定所需的佔位符的數量,然後使用'implode(',',array_fill(0,計數($ data),'?'));' –

+0

並將數組傳遞給'execute()'調用以進行綁定並在一個步驟中執行 –

回答

2

做它象下面這樣: -

<?php 
$data = array(
     'fname'=>'joe', 
     'lname'=>'sina' 
); 

$columns = "`".implode('`,`', array_keys($data))."`"; 
$values = "'".implode("','", array_values($data))."'"; 

//NOW CHANGE QUERY CODE LIKE BELOW 
//"INSERT INTO tblname($columns) values($values);" 
?> 

現在查詢將是這樣的: - https://eval.in/854152

注: -

上面的代碼將工作,但我會建議您使用prepared statements來防止從SQL Injection。感謝

參考求助: -

mysqli::prepare

PDO::prepare

+1

請檢查echo $ columns =「'」的輸出。 implode('',',array_keys($ data))。「'」;' – Saty

+0

@Saty謝謝你。編輯 –

+0

@AlivetoDie非常感謝,我將在插入數據之前使用'prepared語句'。 –

2

你不需要在這裏使用foreach顯示數據。如果您只准備並綁定查詢,則可以將$data傳遞給​​,並通過鍵上的implode()獲取密鑰。

$data = array(
     'fname'=>'joe', 
     'lname'=>'sina' 
); 
$stmt = $pdo->prepare("INSERT INTO tblname (".implode(', ', array_keys($data)).") VALUES (:".implode(', :', array_keys($data)).")"); 
$stmt->execute($data); 

數組中的鍵必須與查詢中的佔位符(前面帶有冒號的那些)匹配。您在查詢中也有語法錯誤,因爲列不能用單引號引用。