2010-11-11 62 views
-1
$mysqli = new mysqli("localhost", "user", "pass", "db"); 

$sql = "SELECT OrgNo, CompanyName 
     FROM ematch 
     WHERE CompanyName LIKE '%A%'"; 

$result = mysqli_query($mysqli, $sql); 

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

錯誤是:警告:mysql_fetch_array():提供的參數不是在這個MySQL有什麼問題 - PHP代碼?生產

回答

4

一個有效的MySQL結果資源我認爲你不能喂的mysqli資源到MySQL的功能。嘗試將mysql_fetch_array(...)轉換爲mysqli_fetch_array(...)

+0

哇!這個愚蠢的小'我'導致了兩個小時的問題!多謝,夥計! – 2010-11-11 13:17:54

+0

NP。很高興有幫助! – 2010-11-11 13:19:33

0

你不需要傳遞mysqli作爲資源。使用它作爲一個對象,並調用它的查詢方法是這樣的:

$mysqli = new mysqli("localhost", "user", "pass", "db"); 

$sql = "SELECT OrgNo, CompanyName 
    FROM ematch 
    WHERE CompanyName LIKE '%A%'"; 

$result = $mysqli->query($sql); 

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

$導致這個例子是一個mysqli_resultset對象。有許多功能可以以各種格式爲對象或數字/關聯數組提供這些結果。檢查所有選項的PHP手冊。如果你需要經常使用這個程序,你可以從mysqli_result基派生類,使一個成員函數出你的代碼,如:

class MyResult extends mysqli_result 
{ 
    public function company_info($name=null) 
    { 
     if ($name==null) 
     { 
     while (($row=$result->fetch_assoc())!=false) 
     { 
      print $row['OrgNo'] .'<br />'; 
      print $row['CompanyName'] .'<br />'; 
     } 
     } 
     else 
     { 
      while (($row=$result->fetch_assoc())!=false) 
     { 
      $result->field_seek(1); 
      if($result->fetch_field==$name) 
      { 
       print $row['OrgNo'] .'<br />'; 
       print $row['CompanyName'] .'<br />'; 
      } 
     } 
     } 
    } 
} 

我在一些額外的代碼投擲給你的感覺更好mysqli函數。我的小例程將光標移動到集合中的第二個字段,並將其與函數的名稱參數進行比較。與mysqli_resultset類似,mysqli類具有許多不同的功能。不要將結果視爲資源。它是一個對象中的成員數據,並通過它的方法進行訪問。記住,加載你的對象數據,然後通過它的成員函數來處理它。如果你需要一個沒有預定義的函數,只需要派生並將其添加到類中。 只是不使用MySQL。它實際上已經過時,可能應該被棄用,以支持「改進」版本中真正的面向對象風格。我在mysqli代表改進。它利用了較新的PHP 5對象模型。當你習慣了面向對象的語法時,你不會想恢復到舊的過程風格。 訪問派生類如下:

$i_am_an_object = new MyResult; //Make The result a MyResult instead of just a mysqli_result 
$i_am_an_object = $mysqli->query($sql); //populate the MyResult object with a base class function 
$i_am_an_object->company_info(); //call your function to print fields from each record in the result\ 
$i_am_an_object->company_info("xyz Company"); //checks the second field in each record for the $name parameter and prints fields for any matching records.