2010-11-11 67 views
0

當我使用如何迭代PHP中的MySQL搜索結果?

function __construct() 
    { 
     // open db 
     $this->db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); 
     if (!$this->db) 
     die(mysql_error()); 

     $this->db->query("SET NAMES 'utf8';"); 
    } 


$result=$this->db->query("SELECT OrgNo, CompanyName FROM ematch WHERE CompanyName LIKE '%$word%';"); 
      $num=$result->num_rows; 
      print $num; 
      $i=0; 
      while ($i < $num) 
      { 
       $OrgNo=mysql_result($result,$i,"OrgNo"); 
       $CompanyName=mysql_result($result,$i,"CompanyName"); 
       $i++; 
       print $OrgNo.' '.$CompanyName.'<br>'; 
      } 

我得到這個錯誤: 警告:mysql_result():提供的參數不是一個有效的MySQL結果資源 並沒有什麼出來。

+4

這不能回答,因爲你似乎可以用一個自定義的DB包裝。我們不知道' - > query()'返回 – 2010-11-11 12:14:04

+0

@Pekka:我想你可能是錯的。如果$ this-> db是mysqli連接,那麼$ this-> db-> query是mysqli OO接口的常規查詢方法。 – markus 2010-11-11 13:32:07

+0

@harkun該mysqli部分後來編輯。現在有意義 – 2010-11-11 14:01:09

回答

8

您可以更改您的代碼如下:

$result = $this->db->query("SELECT OrgNo, CompanyName FROM ematch WHERE CompanyName LIKE '%$word%';"); 

while ($row = mysqli_fetch_array($result)) 
{ 
    print $row['OrgNo'] .'<br />'; 
    print $row['CompanyName'] .'<br />'; 
} 

如果假定$result返回形成你query方法是一個結果資源。

0

你將不得不向我們展示你正在使用DB包裝/類,但我希望有在前進的道路猜測:

$result = $this->db->query("SELECT OrgNo, CompanyName FROM ematch WHERE CompanyName LIKE '%$word%';"); 
while($row = mysqli_fetch_array($result)) { 
    print $row['OrgNo']." ".$row['CompanyName']."<br>"; 
} 

當你使用自定義DB包裝你幾乎更好地使用它的逐行讀取方式而不是使用mysqli_fetch_array();

+0

它顯示所有mysql函數的警告。我必須添加引用還是包含某些內容? – 2010-11-11 12:29:56

+0

@Ahmad Farid - 向我們展示或告訴我們您正在使用哪種數據包封裝器/類,並且我們可以編寫該封裝器/類的代碼並進一步提供幫助 – Brady 2010-11-11 12:34:12

0

嘗試從SQL語句中刪除分號。

"SELECT OrgNo, CompanyName FROM ematch WHERE CompanyName LIKE '%$word%';" 

大概應該是

"SELECT OrgNo, CompanyName FROM ematch WHERE CompanyName LIKE '%$word%'" 
+2

分號是SQL終結器,儘管通過編程訪問MySQL時通常不需要它們。他們不會自行解決問題。 – outis 2010-11-11 14:08:23

+1

考慮我學會了! – kevtrout 2010-11-11 14:20:48