MySQLi绑定结果并获取多行

时间:2010-03-03 21:12:06

标签: php mysqli prepared-statement

我正在尝试使用MySQLi和bind / fetch循环一组结果。

static function getConnection() 
{
    if (!isset(self::$db_conn)) 
    {
        self::$db_conn = new mysqli(self::$DBSERVER,self::$DBUSER,self::$DBPASS, ModelBase::$DBNAME) or die(mysql_error(0)." Error handling database connection. ");
    }
    return self::$db_conn;
}

以上是getConnection()函数。它位于此类继承的ModelBase类中。

$term = "%".$term."%";
$con = ModelBase::getConnection();
$sql = "SELECT name FROM cities WHERE name LIKE ? LIMIT ?";
$query = $con->prepare($sql) or die("Error preparing sql in City ".parent::$db_conn->error);
$query->bind_param("si", $term, $limit) or die("Error binding params in City ".parent::$db_conn->error);
$query->execute() or die("Error executing query in City");

$tmp = "";
$query->bind_result($tmp);
while($query->fetch());
{
    error_log($tmp);
    echo($tmp."\n");
}
$query->close();

然而,我所得到的只是最后一次结果而且只有一次。应该有多个结果,当我在phpMyAdmin中检查以下查询时或者在提示符处我得到多行。

SELECT name FROM cities WHERE name LIKE %d% LIMIT 150

如果我更改

,则不会出现此问题
  

$查询 - > bind_result($ TMP);

  

$查询 - > bind_result(安培; $ TMP);

语法还有其他问题吗?

有更简单的方法吗?也许是一种获取对象的方法?

1 个答案:

答案 0 :(得分:5)

你的while语句末尾有一个分号:

while($query->fetch());

(当然,如果没有在每一圈的花括号之间运行代码,那么会对$ query-> fetch()进行评估,直到它为止。