1

したがって、6 列のテーブルがあり、各列は特定の製品タイプに対応しています。各列には、ユーザーがその製品タイプを選択した回数に対応する数値が保持されます。

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

したがって、ユーザーが type を選択した場合、列の番号を からにA更新したいと思います。だからここに私が書いたSQLコードがあります:A01

$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コードを教えてもらえますか?

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 に答える