[解決済み] Wordpress wpdb->prepare sql string from form
質問
私は現在、外部のxmlフィードを格納するためにカスタムwordpressテーブルを使用しており、この情報は、いくつかのオプションで基本的なHTMLフォームでフィルタリングできるようにする必要があります。
を使用して文字列を構築するのがベストな方法です。
wpdb->prepare
? 私はページネーションに下記を使用しており、$user_queryは現在、以下のように設定されています。
$user_query .= "AND
クエリ1
LIKE $query1 ";
などです。
しかし、この場合、2番目のパラメータを経由しないので、問題が生じる可能性があります。
%d
,
$variable
などです。
//Get Results
$results = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM `feed` WHERE `price` != 0 $user_query LIMIT %d,
%d", $offset, $items_per_page, OBJECT)
);
以上、ご理解いただけたでしょうか。私はフォームからSQLクエリを構築しようとしているだけです。
$_GET
の値をSQLインジェクションの問題なく使用することができます。
ありがとうございました。
解決方法は?
を呼び出すことができます。
$wpdb->prepare
を部分的なクエリで使用することができます。
$user_query = $wpdb->prepare('AND query1 LIKE %s', $query1);
を呼び出すこともできます。
esc_sql
は、ユーザー入力に対して直接サニタイズ処理を行います。
また、LIKE式は別途エスケープする必要があります。
https://codex.wordpress.org/Class_Reference/wpdb/esc_like
$wpdb->esc_like
は、ライク表現に特有の文字(%, \, _)をエスケープしますが、それ以外のエスケープは行いません。この場合でも
prepare
または
esc_sql
のような式をエスケープした後。
更新:コメントにあったこの例を使って。
$user_query = $_GET['query1'];
$user_query2 = $_GET['query2'];
$user = $wpdb->prepare('AND query1 = %s ', $user_query);
$user2 = $wpdb->prepare('AND query2 = %s ', $user_query2);
$results = $wpdb->get_results( $wpdb->prepare('SELECT * FROM test WHERE price != 0' . $user . $user2 . 'LIMIT 20') );
ここで、クエリを部分的に構築する意味はありません。このようにクエリを構築すればよいのです。
$query = 'SELECT * FROM test
WHERE price != 0
AND query1 = %s
AND query1 = %s
LIMIT 20';
$results = $wpdb->get_results( $wpdb->prepare($query, $user_query, $user_query2) );
例として、ユーザークエリーはオプションであると仮定します。その場合は、パラメータが提供される場合のみ、WHERE条件を別途用意する必要があります。
$query = 'SELECT * FROM test
WHERE price != 0';
if($user_query) {
$cond = $wpdb->prepare(' AND query1 = %s', $user_query);
$query .= $cond;
}
if($user_query2) {
$cond = $wpdb->prepare(' AND query2 = %s', $user_query2);
$query .= $cond;
}
$query .= ' LIMIT 20';
$results = $wpdb->get_results( $query );
に渡すときに、クエリに対して prepare を呼び出す必要がないことに注意してください。
get_results
すべてのユーザー入力はすでにサニタイズされているからです。
関連
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み】PHPのクラスが見つからないが、インクルードされている
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。
-
[解決済み] 致命的なエラーです。mysqli_result 型のオブジェクトを使用できません [終了] 。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。