使用 PHP / PDO 更新表迭代数组

这里有类似的问题和一些相当复杂的答案。我不认为它应该那么复杂。也许是的。我是 PDO 的新手。我有一组键值对。我需要用这些值更新记录。有没有更智能的方法来做到这一点?


$sql = "UPDATE Table SET ? = ? WHERE ID = ?";

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

foreach($QueryString as $Key=>$Value)

{

    $stmt->execute($Key, $Value, $RecordID);

}


哆啦的时光机
浏览 107回答 1
1回答

GCT1015

您不能将值绑定到列名,因此您当前的代码根本无法工作。形成该查询以一次进行所有更新也会更有效,例如:$sql = "UPDATE Table SET";$v = 0;foreach ($QueryString as $Key=>$Value) {    if ($v++ > 0) $sql .= ',';    $sql .= " `$Key` = ?";}$sql .= " WHERE ID = ?";$stmt = $pdo->prepare($sql);$stmt->execute(array_merge(array_values($QueryString), array($RecordID)));$QueryString请注意,如果数组的键来自外部来源,则此查询仍然容易受到注入。为避免此问题,您应该检查列是否实际存在,或者使用手动指定的白名单,例如$colnames = ['col1', 'col2', 'col3'];foreach ($QueryString as $Key=>$Value) {    if (!in_array($Key, $colnames)) {        // abort    }    if ($v++ > 0) $sql .= ',';    $sql .= " `$Key` = ?";}或者通过从这个问题information_schema.columns中描述的表中获取列名列表并将该查询的结果用作您的白名单。
打开App,查看更多内容
随时随地看视频慕课网APP