問題描述
我想使用 LIKE%text%語句,同時仍然使用 WordPress $ wpdb 類來清理和準備輸入。
SELECT column_1 from `prefix_my_table` WHERE column_2 LIKE '%something%';
我已經嘗試過這樣的事情沒有效果:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %s;", like_escape($number_to_put_in_like));
如何使用 WordPress 資料庫類正確準備一個%LIKE%SQL 語句?
最佳解決方案
$wpdb->esc_like 功能存在於 WordPress 中,因為常規資料庫轉義不會轉義% 和_字元。這意味著您可以將它們新增到 wpdb::prepare()的引數中,沒有任何問題。這也是 what I see in the core WordPress code:
$wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%');
所以你的程式碼看起來像:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %s;", '%' . $wpdb->esc_like($number_to_put_in_like) . '%');
您還可以在查詢中新增%%,以獲得文字%(wpdb::prepare()在後臺使用 vsprintf(),which has this syntax),但請記住,您的字串不會被引用,您必須自己新增引號 (這不是您通常必須做的在 wpdb::prepare()。
次佳解決方案
您需要百分之二,所以它們不被 wpdb->prepare()的片段標記處理:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %%%s%%;", $wpdb->esc_like( $number_to_put_in_like));
PS 不知道這是最好的/唯一的方法。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。