所以我有一个包含 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 代码?
最佳答案
首先确保 $column
在可接受的值列表中。接下来,您不能绑定(bind) :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 实例中抛出的异常以确保它是合法的。
关于php - 更新 SQL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424009/