2012-12-19 17 views
5

2日前にWordpress 3.5にアップグレードしました。私は多くのプラグインを使用せず、GoDaddyは私のプラグインが正しく動作していることを保証します。しかし、初めてこのブログの投稿にこのエラーメッセージが表示されています。警告:wpdb :: prepare()の引数2がありません。

この問題を解決するお手伝いをしていただけますか?

警告:欠落引数2 wpdbため::(準備)、ライン91上/home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.phpに呼び出され、定義されました/home/content/52/8331652/html/wp-includes/wp-db.phpにライン上で990

Hereは、上部の画面の右側に、この問題を抱えているページの一つであります投稿の

ご迷惑をおかけして申し訳ありません。

+0

/home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.phpファイルを開き、91行目に貼り付けると、何が起きているのかがわかります。 –

+0

'themes/chateau-2.0/functions.php'の91行目でエラーを生成している関数を表示できますか? –

+0

多分あなたは[Googleそれ次回](http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/) –

答えて

4

でのwp-config.phpの次の行を追加します。

@ini_set('display_errors', 0); 

あなたのテーマ/プラグインが正常に新しいWordPressのAPIにアクセスしません。それでも動作しますが、エラー警告が生成されます。 longer explanationをチェックしてください。

+0

php.iniファイルはどのようにして見つけられますか?私はそれがワードプレスファイルではないことを読んだ。ありがとうございました。 –

+0

私はちょうどGoDaddyと呼ばれ、あなたのヘルプノートで私を助けました。ありがとう。 –

8

WordPress 3.5には、特定のセキュリティリスクを軽減するためにいくつかの大きな変更が加えられました(SQL Injectionなど)。プラグイン開発者が引数を分離するのではなく完全なクエリを送信していたので、wpdb::prepareメソッドが安全に使用されていませんでした。これは、 'prepared'ステートメントが準備されていないことを意味し、実際には照会に直接パラメーターを渡していました。これはセキュリティー・ノー・ノーです。 3.5から、このメソッドは3つの引数を取るようになりました。

、あなたの当面の問題に対処するphp.iniファイルを編集し、error_reportingの行を見つけて、次のように変更するには...

error_reporting(E_ALL & ~(E_NOTICE|E_WARNING)); 
は、サーバーを再起動し

これにより、すべてのマイナースクリプトエラーが報告されなくなります。

また、エラーをログファイルに送信します。 php.iniで、...あなたのウェブサイト上に表示されてからエラーを防止します

error_log "/path/to/php-error.log" 

をこの行を(それをアンコメント)を見つけると、それを変更します。代わりに、あなただけが見ることができるログに書き込まれます。

このエラーが気になる場合は、不正なプラグインにダミー値を使用させてください。私たちは、影響を受けたプラグインは、法第二と第三引数としてnullを送信することにより、... wpdb::prepare方法は3つの引数を取ること

$wpdb->query( 
    $wpdb->prepare( 
     " 
      DELETE FROM $wpdb->postmeta 
      WHERE post_id = %d 
      AND meta_key = %s 
     ", 
     13, 'stack overflow' 
    ) 
); 

を見ることができ、それは問題を完全に解決します。

1

functions.phpでは、クエリの後にパラメータとして「」を追加します。

0

私も同じ問題に直面していました。 このコードをwp-config.phpファイルに追加します。

@ini_set('display_errors', 0); 

その後、私はもう一度警告メッセージが表示されませんでした。

0

$ wpdb->はパラメータで実行する必要があります準備しているために発生します。

パラメータがありませんか?

その後

、代替:

は、クエリに追加します。

%dのが

真で、真のパラメータを含める必要があります

$sql = "SELECT * FROM TB_YOUR_TABLE WHERE %d AND ..."; 

マジックキー=

$results = $wpdb->get_results( 
       $wpdb->prepare($sql,1) 
      ); 

はmysqlの場合はtrue

関連する問題