2010-03-03 75 views
4

我试图循环使用MySQLi和绑定/获取的一组结果。MySQLi绑定结果并获取多行

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);

语法有什么问题吗?

有没有更简单的方法来做到这一点?也许一种获取对象的方法?

+0

@Josh_K我需要看看你的数据包封装处理你的查询。有很多事情可能会因你如何绑定/获取结果而出错。 – anomareh

+0

这只是MySQLi,我用getConnection() –

回答

5

你必须在你的while语句的结束分号:

while($query->fetch()); 

(这当然,使$查询 - >取()评估,直到它是不正确的,但不运行的代码每圈大括号)

+0

的副本更新了原文。我已经修复了它,但这很奇怪,在[另一个类似的事件]之后,它变成了什么样的状态(http://joshuakehn.com/blog/index .PHP /基本/视图/ 39/1行的代码)。 –