bugfix> php > 投稿

そのようなユーザーと呼ばれるテーブルがあります:

   ____         ____            __________        _____________
   |    |       |     |          |         |       |           |
   | id |       | name|          |firstCon |       | secondCon |
   |____|       |_____|          |________ |       |___________|
     1           john               true               false
     2           mark               false              false

firstCon を変更したいおよび secondCon true の値または false

だから私は次のクエリを使用しています:

$sql = "UPDATE users SET ? = ? WHERE name = ?";
$query->bind_param($condition, $value, $name);

どこ $condition いずれかの firstCon または secondCon$value = true/false$name ユーザーの名前です。

私はそのエラーを受け取ります:

1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version 
for the right syntax to use near '? = ? WHERE name = ?'

どの条件が選択されたのかわからないので、私はその方法を使用していますので、名前に依存しています。

回答 1 件
  • 列名(または他の識別子)をパラメーターとして渡すことはできません。クエリ文字列を変更する必要のない別の方法を次に示します。

    UPDATE users 
        SET firstcon = (case when ? = 'firstcon' then ? else firstcon end),
            secondcon = (case when ? = 'secondcon' then ? else secondcon end)
        WHERE name = ?;
    
    

    注:これには、より多くのプレースホルダーがあります。パラメーターを名前付きパラメーターとして渡すと、より簡単になる場合があります。

    UPDATE users 
        SET firstcon = (case when :which = 'firstcon' then :value else firstcon end),
            secondcon = (case when :which = 'secondcon' then :value else secondcon end)
        WHERE name = :name;
    
    

あなたの答え