2012-08-17 36 views
0

我在PDOPDO使用引號與陣列

$sFields = "'".implode("', '", $fields)."'"; 
$sColumns = implode(", ", $columns); 
$sql = "INSERT INTO $table ($sColumns) VALUES ($sFields)"; 

是新增內容是用PDO ::報價上我想插入每個值的最短途徑。

我試圖

$fields = array_map('$bdd->quote', $fields); 

但它返回:

警告:array_map()預計參數1是一個有效的回調,功能 '$ bdd->報價' 未找到或無效的功能名稱

+0

希望你正確轉義這些字段/列或我使用的stripslashes報價 – 2012-08-17 03:28:31

+0

stripslashes是sql注入的溼廁紙。它沒有什麼保護你。假裝函數不存在並使用PROPER查詢構造方法。您正在使用PDO - 使用佔位符和準備好的查詢。 – 2012-08-17 03:30:37

+1

之前,你還是會被注入自己,PDO或沒有PDO ... – 2012-08-17 03:31:38

回答

2

還有其他方式比concat sql字符串。

$sColumns = implode(", ", $columns); 
$sFields = implode(',', array_fill(0, count($fields), '?')); 
$sql = "INSERT INTO $table ($sColumns) VALUES ($sFields)"; 

$stmt = $pdo->prepare($sql); 
$stmt->execute($fields); 
+0

出於安全目的是否足夠好? – 2012-08-17 03:41:35

+0

爲了安全起見,這是最好的解決方案。但是,它沒有回答OP中的問題。奧列格的回答確實回答了這個問題。 – dotancohen 2017-04-25 08:59:27

3

嘗試

$fields = array_map(array($bdd, 'quote'), $fields);