2010-11-11 58 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.