私はある時点で私はデータベースに特定のタイトルが存在するかどうか見る必要があるWordPressプラグインを持っています。 2年間、このコードはうまくいきました:
$myposttitle= $wpdb->get_results(
"select post_title from $wpdb->posts
where post_title like '%". mysql_real_escape_string($myTitle) . "%'"
);
しかし、php 5.5では。また、WP 3.9.1では、関数mysql_real_escape_string
は廃止予定であるため、エラーとなります。
私はもう$myTitle
を使うことができなくなった今、他のどの関数がmysql_real_escape_string
の内容を適切にエスケープするかについてのどんな考えでも?
ありがとう
WordPressでデータベースを扱うときは、ローレバーのmysql_*
またはmysqli_*
関数を使用しないでください。
常に$wpdb
メソッドを使うようにしてください。あなたの場合は prepare()
を使うべきです:
$query = $wpdb->prepare(
"SELECT post_title from $wpdb->posts
WHERE post_title LIKE %s",
"%" . $myTitle . "%"
);
さらに、1つの列を取得したら、get_col
の代わりに get_results
を使用する方が簡単です。
$myposttitle = get_col( $query );
与えられたprepare()
の答えは部分的に正しいのですが、SQLステートメントの文字列を手動でエスケープする方法が必要な場合は、esc_sql()
を使用してください。
文字列をエスケープしてlike文の中に入れるという特定のケースでは、次のように正しく記述する必要があります。
$query = $wpdb->prepare(
"SELECT post_title from $wpdb->posts
WHERE post_title LIKE %s",
"%" . $wpdb->esc_like( $myTitle ) . "%"
);
$ wpdb-> esc_like()は、検索対象のフレーズに含まれる可能性のあるパーセント記号、アンダースコア、またはバックスラッシュを正しくエスケープするために必要です。 $ wpdb-> esc_like()は準備された入力を返さず、LIKEで使用される特殊文字をエスケープするだけです。したがって、prepare()はまだ必要です。