所以我有一个包含6列的表,每列对应于某种产品类型。每列都包含一个与人们选择该产品类型的次数相对应的数字。
A | B | C | D | E | F
---------------------
0 | 0 | 0 | 0 | 0 | 0
因此,如果用户选择A
类型,那么我想将A
列中的0
列更新为1
。所以这是我写的SQL代码:
$link = new PDO('***;dbname=***;charset=UTF-8','***','***');
$stmt = $link->prepare("UPDATE table SET :column=:num");
$stmt->bindParam(':column', $column);
$stmt->bindParam(':num', $num);
$stmt->execute();
但它根本没有更新任何东西。所以我猜测SQL代码有问题,很可能与列占位符:column
有关。谁能告诉我正确的 SQL代码?
答案 0 :(得分:4)
首先确保$column
位于已接受的值列表中。接下来,您无法绑定:column
,您将按照以下方式对其进行分配:
$stmt = $link->prepare('UPDATE table SET ' . $column .' = :num');
$stmt->bindParam(':num', $num);
$stmt->execute();
如果您要检查有效$column
我会使用
$valid_column = preg_match('/[a-z0-9_]/i, $column);
或足够的替换(preg_replace
)。虽然您可能将其包装在try / catch中,并设置异常以便在您的PDO实例中抛出,以确保它甚至是合法的。