使用while循环中的fetch会在返回和处理结果的过程中抛出警告

时间:2015-12-11 20:25:16

标签: php mysqli prepared-statement

我正在运行以下查询,并且它在大多数情况下都按预期运行,但偶尔会循环几次然后抛出此警告:

Warning: mysqli_stmt::fetch(): Couldn't fetch mysqli_stmt in...

我认为这与结果有关,但此时我不知所措。

$limit = 'LIMIT ' .($pagenum - 1) * $page_rows .',' .$page_rows;

$sql = "SELECT id, join_id, bus_name, first_name, last_name, address, city, state,
       zip, phone, fax, email, wsaddr FROM auctioneer";

$bystate = " ORDER BY state ".$limit;//by state

$sortedLastSQL = " ORDER BY last_name ".$limit;// sort by last_name

$alphbeticalSql = " WHERE bus_name LIKE '".$order."%' ".$limit; //sort by letter

$sortOrderStSql = " WHERE state LIKE '".$order."%' ORDER BY state ASC ".$limit;

$sortOrderLnSql = " WHERE last_name LIKE '".$order."%' ORDER BY last_name,
first_name ASC ".$limit;

if(empty($_GET['sort']) && empty($_GET['order'])){
    $sql = $sql.' '.$limit;
}
if(!empty($_GET['order']) && empty($_GET['sort'])){
    $sql = $sql.$alphbeticalSql;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'state' && empty($_GET['order'])){
    $sql = $sql.$bystate;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'last_name' && empty($_GET['order'])){
    $sql = $sql.$sortedLastSQL;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'state' && !empty($_GET['order'])
&& $_GET['order'] = range('A','Z')){
    $sql = $sql.$sortOrderStSql;
}
if(!empty($_GET['sort']) && $_GET['sort'] === 'last_name' && !empty($_GET['order'])
&& $_GET['order'] = range('A','Z')){
    $sql = $sql.$sortOrderLnSql;
}

$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $join_id, $bus_name, $first_name, $last_name,
      $address, $city, $state, $zip, $phone, $fax, $email,$wsaddr);

while($stmt->fetch()){
    //do a ton of stuff here
}

注意:此时这只是一个原始查询,没有安全措施用于调试目的。

1 个答案:

答案 0 :(得分:0)

所以问题不在上面找到的更大的代码中,它包含在while循环本身中。

我有以下内容:

while($stmt->fetch()){ 
    if($join_id != 0){
        $sql3 = "SELECT count(*) FROM auctions WHERE join_id = ?";
        $st = $conn->prepare($sql3);
        $st->bind_param("i", $join_id);
        $st->execute();

        $st->store_result();
        $st->bind_result($l);

        $st->fetch();
        $st->close();
    }
}

else { $l = 0; }添加到if语句中,问题消失了。

这就是为什么我讨厌准备好的陈述,因为它总是一场疯狂的追逐!