-1

みなさん、こんにちは。次のエラー メッセージが表示されます。

Warning: Missing argument 2 for wpdb::prepare(), called in /home/url.com/wp-content/plugins/WPEC-Personalize-3.8/wpec-personalization.php on line 228 and 326 and defined in /home/url.com/wp-includes/wp-db.php on line 990

228 行目と 326 行目にコードが見つかりました。

$add = $wpdb->get_var($wpdb->prepare("SELECT enabled FROM ". $table_name ." WHERE pers_id  = ". $myresults->pers_id." AND product_id = ".$product_id));

そしてそれを新しいワードプレス(3.5クエリ)標準に変更しました:

$add = $wpdb->get_var( $wpdb->prepare(
    "SELECT enabled FROM %s WHERE pers_id = %d AND product_id = %d",
    $table_name, 
    $myresults->pers_id, 
    $product_id
));

何が間違っているのかわかりませんが、以下のコードを更新するとエラーメッセージが表示されなくなりましたが、製品を更新するたびに、プラグインが作成しているすべてのカスタムフィールドが複製されます.

例を参照してください: https://www.americasfinestmailbox.com/products-page/birds/hummingbird-vertical/

プラグインの作成者はこのプラグインをサポートしていないため、どんな助けも大歓迎です。

ここにコード全体を貼り付けました: http://www.pastebin.com/gxqEjee2

ありがとう!ウィリアム

4

1 に答える 1

0

あなたの問題は設計上の問題です。「これはセキュリティに良い」と聞いたので、プリペアド ステートメントを使用します。しかし、問題は、準備されたステートメントではないかのように使用していることです。

準備済みステートメントを使用する場合、プログラムは次のように動作すると予想されます。

  1. パラメータ値なしでクエリを送信して解析する
  2. パラメータを送信
  3. クエリを実行し、パラメータに関係なくクエリが必要なときに 2 になりました。

したがって、クエリ内でパラメーターを指定することはできません。worldpress では、. で始まるプレースホルダーを指定する必要があります%。次に、prepareメソッドで値を指定して、セキュリティで保護され、安全に送信されるようにします。

于 2013-02-04T17:04:26.197 に答える