0

mysql_connect から pdo に切り替えようとしていますが、うまくいきません。ここに私のコードがあります:

//get the row sk
$sk = strtok($string, "_");
//get the column name (the rest of the $string)
$column_name = substr($string, strpos($string, "_") + 1);
//get the value
$value = $_SESSION['save_arr'][$string];
echo "{$column_name} {$value} {$sk}</br>";
$sql = "update tbl_brand set ?=? where brand_sk=?";
$q = $pdo_conn->prepare($sql);
$q->execute(array($column_name, $value, $sk));

いくつかの値をハードコーディングすると、正常に動作します

$sql = "update tbl_brand set name_long='name' where brand_sk='1'";

私はそれが単なる構文の問題だと確信していますが、私はそれを見ることができません。私はこの例に取り組んでいます http://www.phpeveryday.com/articles/PDO-Error-Handling-P552.html

エコーの結果は次のようになります。

name_long ナショナル オーチョ グラス 2

4

1 に答える 1

7

列名は、準備されたステートメントで動的な値にバインドできません。文字列や整数などの定数のみをバインドできます。そのため、準備する前にSQLに列名を含める必要があります。

$sql = "update tbl_brand set `$column` = ? where brand_sk = ?";

SQL ステートメントに埋め込む前に、$column 値が適切にサニタイズされていることを確認する必要があります。

mysql では、次のように列識別子をエスケープできます。

$column = str_replace("`", "``", $column);
于 2012-10-22T00:32:41.457 に答える