我正在尝试更新使用预准备语句编写的代码。这是我第一次使用它们,我很难检索到所有结果。当我使用直接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);
}
答案 0 :(得分:1)
您在进入循环之前正在运行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();
答案 1 :(得分:0)
试试这个:
while ($data = $stmt->fetch()){
echo $data;
}
$stmt->close();
答案 2 :(得分:0)
您的主要问题称为“ 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();
}