1. ホーム
  2. php

[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される

2022-02-10 23:09:17

質問

この質問はいろいろなところで何度か出されていますが、決定的で明確な答えが見つかっていません。ほとんどの解決策は、php.iniファイルでMagic Quotesを無効にすること(私はそうしました)、またはWPのコアファイルを修正することを勧めているものです。

とにかく、質問はこうです:なぜ$wpdb->insertや$wpdb->updateを使うたびに、シングルクォートの前にスラッシュが追加されるのでしょうか?例えば、以下のように。

<ブロッククオート

いちごを食べたことがある になる I've eaten strawberries

以下は、私が使用したサンプルコードです。

$id = $_POST['id'];
$title = $_POST['title'];
$message = $_POST['message'];

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id))

同じ問題がここにもありました。 Wordpress のデータベース出力 - SQL インジェクションのエスケープを削除する が、quot;disable magic quotes"を除けば、解決されませんでした。

解決するには?

一日かけて考えた結果、答えは以下の通りです。

Wordpressは$_POST宣言時にエスケープしますが、実際の挿入時にはエスケープしません。

$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping.
$title = stripslashes_deep($_POST['title']);
$message = stripslashes_deep($_POST['message']);

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id));

こうすることで、WPは引用符の前にスラッシュを追加しないようになります。