Php $\u PDO更新后:变量

Php $\u PDO更新后:变量,php,pdo,Php,Pdo,我的页面收到$U POST,用于PDO更新: 如何在不知道id的情况下更新我的表 UPDATE table_name SET id_XXX = ? AND id_XXX = ? AND ... WHERE id = 5296 id_XXX的列表在另一个表中可用。这不安全,但它显示了如何将列和值添加到查询中 <?php $update = []; foreach($_POST as $key => $value) { if(substr($key, 0, 3) == 'id

我的页面收到$U POST,用于PDO更新:

如何在不知道id的情况下更新我的表

UPDATE table_name SET id_XXX = ? AND id_XXX = ? AND ... WHERE id = 5296

id_XXX的列表在另一个表中可用。

这不安全,但它显示了如何将列和值添加到查询中

<?php
$update = [];
foreach($_POST as $key => $value) {
    if(substr($key, 0, 3) == 'id_') {
        // Only if $key starts with "id_"
        $update[] = "$key = $value";
    }
}
$sql = 'UPDATE table_name SET ' . implode(", ", $update) . " WHERE id = 10";

您的语法无效。关于更新语法,请参阅手册。如果我用一个数字替换XXX,它会起作用。这就是为什么我要问这个问题。变量是什么?如果它是按帖子接收的,那么它不是已经是一个数组了吗?您只需要一个查询生成器但更重要的是:这种可怕的表模式是如何形成的?注意:绑定XXX不能与PDO一起工作,因为您不能绑定列名,只能绑定值。因此,我希望在输入您的列id\u XXX编号之前,您有另一种形式的验证。它很有效!谢谢,但是如果为空,如何设置“null”$值?(例如:id_89=''->id_89=null)
<?php
$update = [];
foreach($_POST as $key => $value) {
    if(substr($key, 0, 3) == 'id_') {
        // Only if $key starts with "id_"
        $update[] = "$key = $value";
    }
}
$sql = 'UPDATE table_name SET ' . implode(", ", $update) . " WHERE id = 10";
<?php
$update = [];
foreach($_POST as $key => $value) {
    if(substr($key, 0, 3) == 'id_') {
        // Only if $key starts with "id_"
        $val = (empty($value)) ? 'null' : $value;
        $update[] = "$key = $value";
    }
}
$sql = 'UPDATE table_name SET ' . implode(", ", $update) . " WHERE id = 10";