Php PDO BindParam不会每次都在while循环中绑定
我正在通过PHP中的PDO连接到SQL Server数据库。我的问题是为什么每次运行while循环时都不能将参数绑定到命名的位置标记?代码如下:Php PDO BindParam不会每次都在while循环中绑定,php,sql,pdo,Php,Sql,Pdo,我正在通过PHP中的PDO连接到SQL Server数据库。我的问题是为什么每次运行while循环时都不能将参数绑定到命名的位置标记?代码如下: public function search($search, $field) { $c = new PDO("sqlsrv:Server=localhost;Database=$this->_db", $this->_user, $this->_pass); $sql = " SELECT Titl
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;
}
}
结果集返回空,没有错误。此搜索肯定会返回数据。当我只输入一个搜索词时,它工作正常。但是,当我输入多个查询片段时,总是得不到任何结果。您正在循环中准备每个不完整的查询片段。您应该只准备一次,并且应该准备完整的SQL查询 更新:不确定在哪里查找文档,但手册页面有几个示例:
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
。。。但是您之前删除并创建了一个新的$stmt对象。您构建的对象是错误的。您应该完整地构建查询字符串,然后绑定参数。谢谢。那么我可以一次绑定多个参数吗?我正在努力寻找关于这个的文档…哦,对了,我看到了,是的,但我不想把每一个都单独写出来。是否仍然需要循环它来查找所有参数并自动执行?所以它可以自动执行“:s1“,$s1”等操作?您必须调用PDO::prepare一次来创建一个PDOStatement对象,并将所有参数绑定到唯一的对象。我觉得我没有被理解。在我的解释中有什么具体的部分我可以改进吗?你可以在循环中绑定。看看这里:这里:谢谢阿尔瓦罗,你的解释很好。乔纳森:这些链接正是我想要的,谢谢。
$stmt->bindParam( ':s'.$x, $currTerm );