###実現したいこと
$wpdb->prepare()
を使って独自テーブルを更新したいのですが、アポストロフィーが勝手に入ってしまいエラーとなります。
勝手に入らないようにしたいのですが、どのようにすべきでしょうか?
###発生している問題・エラーメッセージ
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 ''vote_count' = 'vote_count' + 1 WHERE ID = 111' at line 2
###該当のソースコード
php
1$target_id = 111; // 実際は動的に変化します 2$col = 'vote_count'; // 実際は動的に変化します 3$query = "UPDATE wp_test SET %s = %s + 1 WHERE ID = %d;"; 4$prepares = [$col,$col,$target_id]; 5$rows = $wpdb->get_results($wpdb->prepare($query, ...$prepares ));
試したこと
上記エラーで実行されるSQLを$wpdb->last_error
で確認すると以下でした。
sql
1UPDATE wp_test 2SET 'vote_count' = 'vote_count' + 1 3WHERE ID = 111;
そこでエラーを参考に、下記SQLをphpMyAdminから実行すると更新できました。
そのためアポストロフィーが余計だというエラーメッセージを解消すればいいと考えています。
sql
1UPDATE wp_test 2SET vote_count = vote_count + 1 3WHERE ID = 111;
しかし公式リファレンスを見ると$wpdb->prepare()
で文字列の置換は%s
しかないようで、これは勝手にアポストロフィーがつくことを回避できないように見受けられます。
またこちらのQAサイトによれば、「表名と列名にprepare
が使えない」とのことですが、これは事実でしょうか?
もしこれが事実でなく、アポストロフィーを除外する方法があれば知りたいのですが…
別の方向からの解決策でも構いませんので、どなたかアドバイス頂けましたら幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/17 16:14