0

条件付きでSQLステートメントを作成したいのですが、問題が発生しています。この場合、WHERE句があるかどうかはわかりません。

$sql=null;
$arr='';

if( $id != 'all' ){
    $sql = '  WHERE type = :type AND id=:id';
    $arr = array(':type'=>$type,':id'=>$id);
}

$stmt = $dbh->prepare("SELECT * FROM table $sql");
$stmt->execute($arr);
...

idが'all'と等しい場合は、WHERE句なしでSQLを書き直したいだけです。実行するには$arrを渡す必要があるため、id ='all'の場合、executeは値を期待しているため、次のエラーが発生します。PHP警告:PDOStatement :: execute()は、パラメーター1が配列であり、文字列が指定されていることを期待しています。

空の配列を渡して実行しようとしましたが、エラーも発生します。それぞれが独自のexecutestatememtを持つSQLの2つの完全なブロックを書き直す必要なしにこれを行うにはどうすればよいですか?

4

1 に答える 1

0

prepareステートメントをifセクションに移動し、2番目のケースの2番目のprepareステートメントを追加する必要があるようです。elsefor whenも追加した方が、(読みやすくするために)おそらくより良いでしょうid === 'all'

于 2012-09-30T15:07:35.043 に答える