1

所以我有一个有 6 列的表,每列对应一个特定的产品类型。每列都有一个数字,对应于人们选择该产品类型的次数。

A | B | C | D | E | F
---------------------
0 | 0 | 0 | 0 | 0 | 0

因此,如果用户选择类型A,那么我想将列A的编号从更新01。所以这是我写的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 placeholder 有关:column。谁能告诉我正确的SQL 代码?

4

1 回答 1

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

于 2012-11-16T20:35:30.087 回答