WordpressでSQL文のORDER BYに変数を使用したいが、計算されない
SQL文のORDER BYでabs()を用いた近似値の探索をしようとしています。
SQLインジェクション対策として、abs()をプレースホルダーとして渡すようにコーディングしましたが、%sの文字列がシングルクォーテーションで括られるためうまく動きませんでした。
// 1
// $keyは可変
$abs = "abs(" . $key . " - 80)";
$query = "SELECT * FROM $wpdb->hardness_table ORDER BY %s LIMIT 1";
$sql = $wpdb->prepare($query,$abs);
$rows = $wpdb->get_results($sql);
// SQL文が"SELECT * FROM $wpdb->hardness_table ORDER BY 'abs(abc - 80)' LIMIT 1" となる
やむを得ず下記のように直接文章内に変数を配置したら動きますが、warning文が出る状態です。
// 2
$abs = "abs(" . $key . "- 80)";
$query = "SELECT * FROM $wpdb->hardness_table ORDER BY $abs LIMIT 1";
$sql = $wpdb->prepare($query);
$rows = $wpdb->get_results($sql);
上記のようにプレースホルダーを用いた状態でabs()の計算をさせることは可能でしょうか。または2のコードのように直接書いても問題はないのでしょうか。
ご教示いただければと思います。