疑难解答“警告:mysqli_result :: fetch_array()期望参数1很长,对象给出”

时间:2012-06-29 21:34:42

标签: php mysqli

我得到的警告是:

  

警告:mysqli_result :: fetch_array()期望参数1为long,对象在第103行中给出。

我在第103行while ($row = $result->fetch_array($result)) {

旁边发表了评论

问题2:我可以将任何内容存储在包含文件中,还是应该存储?

问题3:对于$query,我可以将这些买方,卖方等中的任何一个存储在某个阵列中吗?怎么样?

/* FETCH CONTACT INFORMATION */

$query = ("SELECT * FROM contacts WHERE contacttype IN ('Buyer','Seller','Buyer / Seller','Investor') AND leadstatus = 'New' ORDER BY date DESC");

$ID = $row ['ID'];     
$firstname = $row ['firstname'];     
$lastname = $row['lastname'];
$ID = $row['ID'];   
$partner  = $row['spousefirst'];   
$phonecell = $row['phonecell'];
$email = $row['email'];
$date = $row['date'];
$contacttype = $row['contacttype'];
$agentassigned = $row['agentassigned'];
$leadstatus = $row['leadstatus'];

$result = $mysqli->query($query) or die ("Error: ".mysqli_error($mysqli));

echo'
  <table class="results" id="results">
    <thead> 
      <tr> 
        <th width="10"><input type="checkbox" name="checkAll" id="checkAll" class="checkall" value="check all"></th>
        <th>NAME</td> 
        <th>PARTNER</td> 
        <th>PHONE</td> 
        <th>EMAIL</td> 
        <th>DATE</td> 
        <th>TYPE</td> 
        <th>AGENT</td> 
        <th>STATUS</td> 
        <th>NOTES</td> 
        <th>TASKS</td> 
        <th>&nbsp;</td>
       </tr> 
     </thead>';

while ($row = $result->fetch_array($result)) {  // THIS IS LINE 103

      echo'
     <tbody>       
       <tr>
        <td width="10"><input type="checkbox" name="" id="" value="'.$ID.'"></td>
        <td><a href="/backend/leads/view/?ID='.$ID.'"><strong>'.$firstname.' '.$lastname.'</strong></a></td>
        <td><a href="/backend/leads/view/?ID='. $ID.'">'.$partner.'</a></td>
        <td>'.$phonecell.'</td>
        <td><a href="mailto:'. $email.'">'.$email.'</a></td>
        <td>'.date("M jS, g:i A", strtotime($date)).'</td>
        <td>'.$contacttype.'</td>
        <td>'.$agentassigned.'</td>
        <td>'.$leadstatus.'</td>
        <td><a href="/backend/contacts/notes.php?ID='.$ID.'">View</a> +</td>
        <td><a href="/backend/contacts/todo.php?ID='.$ID.'">View</a> +</td>
        <td><a href="/backend/contacts/deletesuccess.php?ID='.$ID.'">D</a></td>
       </tr>
     </tbody>       
    </table>';

}
?>

1 个答案:

答案 0 :(得分:4)

在面向对象模式下,fetch_array()的参数指定了获取类型(MYSQLI_ASSOC, MYSQLI_NUM),并且不接受结果资源。

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

在循环中,我们假设您要使用$row中的键而不是纯变量。从上面将变量赋值移动到循环中。

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

  // Move these assignments into the loop so they are available to your
  // echo statement when constructing your <tbody>
  $ID = $row ['ID'];     
  $firstname = $row ['firstname'];     
  $lastname = $row['lastname'];
  $partner  = $row['spousefirst'];   
  $phonecell = $row['phonecell'];
  $email = $row['email'];
  $date = $row['date'];
  $contacttype = $row['contacttype'];
  $agentassigned = $row['agentassigned'];
  $leadstatus = $row['leadstatus'];

  echo'
 <tbody>       
   <tr>
    <td width="10"><input type="checkbox" name="" id="" value="'.$ID.'"></td>
    <td><a href="/backend/leads/view/?ID='.$ID.'"><strong>'.$firstname.' '.$lastname.'</strong></a></td>
    <td><a href="/backend/leads/view/?ID='. $ID.'">'.$partner.'</a></td>
    <td>'.$phonecell.'</td>
    <td><a href="mailto:'. $email.'">'.$email.'</a></td>
    <td>'.date("M jS, g:i A", strtotime($date)).'</td>
    <td>'.$contacttype.'</td>
    <td>'.$agentassigned.'</td>
    <td>'.$leadstatus.'</td>
    <td><a href="/backend/contacts/notes.php?ID='.$ID.'">View</a> +</td>
    <td><a href="/backend/contacts/todo.php?ID='.$ID.'">View</a> +</td>
    <td><a href="/backend/contacts/deletesuccess.php?ID='.$ID.'">D</a></td>
   </tr>
 </tbody>       
</table>';

}

修改

关于你的其他几个问题......

我想说将这个存储在一个包含文件中并没有什么好处。这不是很多代码,如果你不打算在其他地方重复使用它,那么将它移出这个文件将没有任何好处。

您的查询是静态的,不使用任何PHP变量。因此,将它们存储在数组中也没有多大好处,这需要在PHP中进行额外的工作才能转换为SQL。

$options = array('Buyer','Seller','Buyer / Seller','Investor');
// Join them into a string and quote both ends of it.
// If this includes any user input, you must call `$mysqli->real_escape_string()` on _each_ of them.
// Since in this one instance it is static in your code though without variables, that isn't necessary here
$options = "'" . implode("','", $options) . "'";
$query = ("SELECT * FROM contacts WHERE contacttype IN ($options) AND leadstatus = 'New' ORDER BY date DESC");