4

SQLの処理に使用するユニバーサル関数があります。このエラーが発生します(1日に数回、頻繁ではありません)。

PHP Catchable fatal error:  Object of class PDO could not be converted to string in...

基本的に、使用している関数には値の配列が渡されます。コードを挿入して、その配列にPDOオブジェクトを配置している必要があります。

変数がPDOオブジェクトであるかどうかをチェックするarray_filter関数を作成する必要があります。このための簡単なifステートメントを実行するにはどうすればよいですか?

if($var == PDO)

編集:素晴らしい答えをありがとう!誰かが興味を持っている場合のために、これが私が問題を解決した方法です。無効な入力がどこから来ているのかを見つけることができました。

$before=$original_array;
$after = array_filter($before, "find_error");
if(count($before)!=count($after)){
    $error=print_r(debug_backtrace(false),true);
    $arr=print_r($before,true);
    send_message("admin@email.com","Error Report",$arr.$error); 
//send_message is a simple function for sending emails. You could also write information to a txt file, etc.
}

function find_error($var){
    return !($var instanceof PDO);
}
4

3 に答える 3

13

instanceofは、PHP変数が特定のクラスのインスタンス化されたオブジェクトであるかどうかを判別するために使用されます。

if($var instanceof PDO) {
   // your code
}
于 2013-03-24T07:53:24.770 に答える
2

これにはinstanceofを使用できます。

if($var instanceof PDO){
    //code here
}

しかしあなたは言う

私は自分のコードをすり抜けて、その配列にPDOオブジェクトを配置したに違いありません

そのスリップを見つけて修正することをお勧めします。そうしないと、開発を続行し、その配列をアプリケーションの他の部分に渡すときに、他の問題を自分で保存している可能性があります。

症状の治療に集中するのではなく、常に問題を解決してください。

于 2013-03-24T07:55:12.433 に答える
2
  1. あなたは病気の代わりに症状を治そうとしています。
  2. あなたは単なる憶測からそれを試しています。

あなたがやろうとしていることは「エラーメッセージ抑制」と呼ばれています。すでに善良なサマリア人によってもたらされた希望のif声明で、あなたはプログラムの流れに誤りがないふりをして目を閉じているだけです。それが残っている間。

優れたプログラマーは、「エラーを追跡する方法」ではなく、「エラーを追跡する方法と修正する方法」を尋ねる必要があります。

したがって、debug_backtrace()間違ったデータが追加された場所を追跡するためにを使用する必要があります。この関数は、エラーメッセージでマークされた行に配置する必要があります。
次に、コードをデバッグして、PDO結果を追加するという仮定が正しいことを確認する必要があります。
そして最後にエラーを修正します。

私がこの答えを書いている間、あなたは問題を正しい方法で解決することができたようです。しかし、私は将来の読者のためにそれをここに残さなければなりませんでした。

于 2013-03-24T08:16:48.130 に答える