PHP で PDO 経由で SQL Server DB に接続しています。私の質問は、while ループが実行されるたびにパラメーターを名前付きプレース マーカーにバインドできないのはなぜですか? コードは次のとおりです。
public function search($search, $field)
{
$c = new PDO("sqlsrv:Server=localhost;Database=$this->_db", $this->_user, $this->_pass);
$sql = "
SELECT Title
FROM Table WHERE 1=1";
//form array of search terms stored in serachArray variable
$searchArray = explode(' ', $search );
//count objects in array
$num_search_terms = count( $searchArray );
$i = 0;//for search term array (starts at 0)
$x = 1;//for parameter incrementin (starts at 1)
while( $i <= ( $num_search_terms -1 ) )
{
$sql .= "
AND $field LIKE :s".$x;
$stmt = $c->prepare( $sql );
$currTerm = "%" . $searchArray[ $i ] . "%";
$stmt->bindParam( ':s'.$x, $currTerm );
$i++;
$x++;
}
$stmt->execute();
while ( $row = $stmt->fetch( PDO::FETCH_OBJ ) )
{
print $row->Title;
}
}
結果セットはエラーなしで空を返しています。この検索から返されるデータが必ずあるはずです。検索語を 1 つだけ入力すると、問題なく動作します。ただし、複数入力すると、常に結果が得られません。