你好,我已經試過這兩個問題的解決方案(最終目標添加在底部)PHP如何提取關聯數組鍵名稱和值,MySQL查詢
,但我不在$ fields和$ newdata中沒有獲得預期的變量內容
所以我在這裏打印一些var_dump並轉換以提請您的支持。從HTML表
我的陣列衍生物爲簡單起見,我學習的實驗,我只用5場的虛表的工作,當你看到他們是:selected
,user_id
,user_name
,user_company
和user_email
。 最後,我插入了2行值。
表內容發佈爲JSON.stringify。
在這裏,你我的結果
使用通常
print_r ($Arr);
我可以看到這個輸出
Array (
[0] => Array ([selected] => [user_id] => 3 [user_name] => nome3 [user_company] => azien3 [user_email] => email3)
[1] => Array ([selected] => 1 [user_id] => 6 [user_name] => nome6 [user_company] => azien6 [user_email] => email6)
)
下一個我試圖應用的代碼從上面的兩個問題
24 $fields = implode(",", array_keys($Arr));
25 $newdata = "'" . implode("','", $Arr) . "'";
26
27 var_dump($fields);
28 echo "<br><br>";
29 var_dump($newdata);
但我的解釋或我的代碼有些問題,因爲輸出是
Notice: Array to string conversion in D:\xampp\htdocs\ajax-json\post.php on line 25 Notice: Array to string conversion in D:\xampp\htdocs\ajax-json\post.php on line 25 string(3) "0,1" string(15) "'Array','Array'"
你能指出什麼是錯的嗎? 例如我的數組是否正確形成?
最終目標是建立一個查詢,它們將從關聯數組中取得的鍵名和鍵值直接綁定到INSERT的列和值到mysql表中。
換句話說,由於數組的鍵名與數據庫表的列名是相同的,所以我想知道如何創建一個自動模式來創建查詢,就像在這個問題開頭的兩個問題中一樣。
隨着「全自動」是爲了有變數,也許循環建立一個查詢,而不是比寫單列名和相同的列值要插入
編輯:從接受的答案,這是工作代碼。
$my_keys = array_keys($Arr[0]);
// ---- This prevents PDO SQL Injection
$stmt=$pdo->prepare("DESC my_table");
$stmt->execute();
$whitelist_columns=$stmt->fetchAll(PDO::FETCH_COLUMN);
foreach($my_keys as $key){
if(!array_search($key,$whitelist_columns)){ echo "ERROR!"; }
}
// ---- End of prevention
$field_names = implode(",", $my_keys); // build column list
/** @JBH this foreach is needed otherwise the $q_markers will result not PDO placeholders like.
If this is missing, the query inserts all "" values, no matter if you'll adopt bindValue or bindParam**/
foreach($my_keys as &$key){
$key = ":".$key;
}
$q_markers = implode(",", $my_keys); // build PDO value markers
$stmt = $pdo->prepare("INSERT INTO my_table (".$field_names.") VALUES (".$q_markers.")");
foreach($Arr as $key => $val){
foreach($val as $bind_marker => &$bind_val){ /** @ JBH Without "&" here, it will work
only bindValue. Instead with "&", they work both bindParam and bindValue **/
$stmt->bindParam($bind_marker, $bind_val);
}
$stmt->execute();
}
你在$ newdata期待什麼?你正在試圖破解兩個你不能做的數組。你是否試圖破壞每個陣列? $ Arr [0]和$ Arr [1]?即使這是不對的。你不能爆發一個關聯數組。請輸入你期望看到的例子。 – JBH
'$ Arr'是一個多維數組。它的行爲不符合你的期望。 –
嗯,最終目標是建立一個查詢,它們將從關聯數組中取得的鍵名和鍵值直接綁定到mysql表的列和值。換句話說,由於鍵名與數據庫表的列名相同,所以我想知道如何創建一個自動操作來創建查詢,就像在頂部的兩個鏈接中一樣。 – Robert