【问题标题】:PDO use quote with an arrayPDO 将引号与数组一起使用
【发布时间】:2012-08-17 03:22:38
【问题描述】:

我是 PDO 的新手

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

在我要插入的每个值上使用 PDO::quote 的最短方法是什么。

我试过了

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

但它会返回:

警告:array_map() 期望参数 1 是有效的回调,未找到函数 '$bdd->quote' 或无效的函数名

【问题讨论】:

  • 希望你已经正确地避开了这些字段/列,否则你仍然会注入自己,PDO 或没有 PDO...
  • 我在引号前使用了斜杠
  • stripslashes 是sql注入的湿厕纸。它不能保护你。假装该函数不存在并使用正确的查询构造方法。您正在使用 PDO - 使用占位符和准备好的查询。
  • 我正在使用准备但没有占位符,我会检查它

标签: php pdo


【解决方案1】:

试试

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

【讨论】:

【解决方案2】:

除了 concat sql string 还有其他方法。

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

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

【讨论】:

  • 出于安全目的,这是最好的解决方案。但是,它没有回答 OP 中的问题。奥列格的回答确实回答了这个问题。
猜你喜欢
  • 2022-12-31
  • 2021-12-29
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多