2010-03-03 113 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行的代碼)。 –