2016-09-07 8 views
1

多くのクエリでは、クエリーに疑問符表記を使用する方が迅速かつ簡単です。 PDOを拡張して最終実行クエリーを取得する方法については、さまざまなガイドと記事がありますが、疑問符表記を使用するときには動作するものはありません。これはできますか?私はすべてのアカウントで動作するように見えるクエリを実行していますが、何らかの理由で実際のPDOコードに結果が返されません。実際にPDOが実行されているEXACTの最終クエリを取得するには何が必要なので、どこにエラーがあるか確認できますか?bindparamを使用していないときにPDOが実行するURLを取得しますか?

$sth = $dbh->prepare("SELECT fromID,toID,m_key FROM messages WHERE (fromID = ? AND toID IN (?)) OR (toID = ? AND fromID IN (?)) AND message LIKE 'addfriend'"); 
$sth->execute(array($_SESSION['userID'],$include,$_SESSION['userID'],$include)); 
+0

エミュレートが「偽」である場合、*は* mysqlに送信された最終クエリです。 – Mike

+0

「速くて簡単です」というのではなく、より安全で清潔です。 – tadman

+0

あなたはこの答えを見ることができます:http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition – luoboss

答えて

2

問題は?プレースホルダを使用することができますが、inオペレータに変数のリストを表すために、単一の変数をバインドしようとしているという事実ではありません。 プレースホルダをinオペレータにコンマで区切って、そこに含めるパラメータの数をカンマで区切って指定する必要があり、各プレースホルダに別々にバインドする必要があります。

...fromID IN (?, ?, ?, ..., ?)... 
+0

'$ include'は実際には値のリストであると仮定します。 .. 知るか? – Mike

+1

祈り、教えてください。それ以外に何がありますか? – Shadow

+0

それは文字通り何でもかまいません。コンマ区切りの値、単一の値、オブジェクト、配列、nullを含む文字列。私はそれがどこにでも定義されているとは思わない。 – Mike

1

以下の方法が?または:paramプレースホルダに対して、($のparams)値を代入するのに役立ちます。実行される正確なクエリを確認できるようにします。

注:開発用のデバッグ目的にのみ有効です。

public static function interpolateQuery($query, $params) { 
     $keys = array(); 
     $values = $params; 

     # build a regular expression for each parameter 
     foreach ($params as $key => $value) { 
      if (is_string($key)) { 
       $keys[] = '/:'.$key.'/'; 
      } else { 
       $keys[] = '/[?]/'; 
      } 

      if (is_array($value)) 
       $values[$key] = implode(',', $value); 

      if (is_null($value)) 
       $values[$key] = 'NULL'; 
     } 
     // Walk the array to see if we can add single-quotes to strings 
     array_walk($values, create_function('&$v, $k', 'if (!is_numeric($v) && $v!="NULL") $v = "\'".$v."\'";')); 

     $query = preg_replace($keys, $values, $query, 1, $count); 

     return $query; 
    } 
+0

PDOが作成してDBに送信する正確で最終的なクエリを返す方法はありませんか?必ずエミュレートする必要がありますか? –

+0

@not_a_generic_user:そうだと思います。私はまた多くのサーフィンをして、私は最終的なクエリを実行するためにこのメソッドを使用した理由を見つけることができません。 – Tamil

関連する問題