更新SQL列

时间:2012-11-16 20:33:29

标签: php mysql sql database pdo

所以我有一个包含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代码?

1 个答案:

答案 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实例中抛出,以确保它甚至是合法的。