fetch()未返回第一行


fetch() not returning first row

我正在尝试更新使用准备好的语句编写的代码。这是我第一次使用它们,检索所有结果时遇到了困难。当我使用直接SQL语句时,它是有效的,所以我认为这不是问题所在。

在至少有两个结果与查询匹配之前,代码不会返回任何结果,然后它将返回除第一行以外的所有结果。我尝试过使用fetchAll,但对于未定义方法的调用,会出现不同的错误。

提前感谢您所能提供的任何帮助。如果没有太多问题,请提供我可以参考的例子或参考,并完成我的理解。

function html_competitive_make_gallery ($init) {
global $USER;
    $user_id     = $USER->id;
    $page_name = 'competitive';
    $base_name = $init['base_name'];
    global $link;
     $sql_pre = "SELECT form_id, community_id FROM frm_root WHERE user_id = ? 
AND page_name = ? ORDER BY last_modified_date DESC LIMIT 1";
     $stmt = $link->prepare($sql_pre);
     $stmt->bind_param('is', $user_id, $page_name);
     $stmt->execute();
     $stmt->bind_result($form_id,$community_id);
     $stmt->fetch();
     $stmt->close();
$sql = "SELECT data FROM tester WHERE type= '".$base_name."' 
AND form_id= '".$form_id ."' AND community_id= '". $community_id ."' LIMIT 5";
$stmt = $link->prepare($sql);
$stmt->execute();
$stmt->bind_result($data);
$stmt->fetch();
$html[]='<div class="gallery" style ="width:100%;height:30%;overflow:hidden;">';

while ($stmt->fetch()){
                   echo $data;
                }
$stmt->close();
$html[]='</div>';
return implode ( $html);
}

在进入循环之前运行fetch(),因此会丢弃结果的第一行:

$stmt->execute();
$stmt->bind_result($data);
$stmt->fetch();                    // <<< THIS LINE SHOULD NOT BE HERE
$html[]='<div class="gallery" style ="width:100%;height:30%;overflow:hidden;">';
while ($stmt->fetch()){
       echo $data;
}
$stmt->close();

试试这个:

while ($data = $stmt->fetch()){
               echo $data;
            }
$stmt->close();

您的主要问题被称为">mysqli">
只要您使用带有准备好的语句的mysqli,您就会面临这样的问题。

只需退出并使用PDO:

function html_competitive_make_gallery ($init) {
    global $USER;
    global $link;
    $sql_pre = "SELECT form_id, community_id FROM frm_root WHERE user_id = ? 
                AND page_name = ? ORDER BY last_modified_date DESC LIMIT 1";
    $stmt = $link->prepare($sql_pre);
    $stmt->execute(array($USER->id, 'competitive'));
    return $stmt->fetch();
}