Php 如何使用准备好的语句获得mysqli_结果?
当我在寻找另一个问题的答案时,我遇到了以下线索: 它回答了同样的问题。我不知道如何删除我自己的帖子,现在我把它看作是之前问题的重复。版主,请随意删除此帖子。谢谢Php 如何使用准备好的语句获得mysqli_结果?,php,Php,当我在寻找另一个问题的答案时,我遇到了以下线索: 它回答了同样的问题。我不知道如何删除我自己的帖子,现在我把它看作是之前问题的重复。版主,请随意删除此帖子。谢谢 我正在将我的php脚本转换为准备好的语句,但是我在整理获取关联数组的正确语法时遇到了问题。以前构建的非准备版本可以工作,但我不知道如何检索mysqli_结果。我曾尝试过各种我认为可能有效的变异(其中一些在下面提到),但迄今为止没有一种有效。我要么得到“给定对象”要么得到“给定布尔值”。我做错了什么?如何检索mysqli_结果 以下是
我正在将我的php脚本转换为准备好的语句,但是我在整理获取关联数组的正确语法时遇到了问题。以前构建的非准备版本可以工作,但我不知道如何检索mysqli_结果。我曾尝试过各种我认为可能有效的变异(其中一些在下面提到),但迄今为止没有一种有效。我要么得到“给定对象”要么得到“给定布尔值”。我做错了什么?如何检索mysqli_结果 以下是可用的php脚本的非准备版本(简化以演示工作版本与非工作准备状态版本之间的差异): 下面是转换为prepared语句时出现的错误:
// THIS GIVES ME ERROR
$mysqli = new mysqli('localhost', $db_user, $db_password, $db_dbname);
$stmt = $mysqli->stmt_init();
$num = 123456;
$num0 = 0;
$num1 = 1;
$i = 0;
$myList = array(array());
$query = "SELECT col1, col2, col3, col4, col5, colB, colC
FROM tableOne LEFT OUTER JOIN tableTwo ON( tableOne.col3=tableTwo.colA )
WHERE col6=? AND col7=? AND col8=? AND col9=?";
if($stmt->prepare($query)){
$stmt->bind_param("iiii", $num, $num1, $num1, $num0);
$stmt->execute() or trigger_error($mysqli->error);
if ($stmt->store_result()) {
$stmt->bind_result($col1,$col2,$col3,$col4,$col5,$colB,$colC);
while mysqli_fetch_assoc($stmt) {
$thisCol1 = $col1;
$thisCol2 = $col2;
$thisCol3 = $col3;
$thisCol4 = $col4;
$thisCol5 = $col5;
if ($thisCol1 > $thisCol2) {
$myList[$i]["result1"] = "good";
} else {
$myList[$i]["result1"] = "bad";
}
if ($thisCol3 > $thisCol4) {
$myList[$i]["result2"] = "good";
} else {
$myList[$i]["result2"] = "bad";
}
$myList[$i]["thisCol5"] = $col5;
$myList[$i]["thisColB"] = $colB;
$myList[$i]["thisColC"] = $colC;
$i = $i + 1;
}
echo json_encode($myList);
}
} else {
echo $mysqli->error;
echo "no entry found";
$mysqli->close(); // close connection
}
我尝试了$rows=$stmt->execute()和mysqli\u fetch\u assoc($rows),但没有成功。
我还尝试了$rows=$stmt->bind_result($col1,$col2,$col3,$col4,$col5,$colB,$colC),但也没有成功。然后我尝试了$rows=$stmt->fetch(),同样没有效果
我找不到从已执行语句检索mysqli_结果的正确语法。我非常感谢所有的帮助
决议:
多亏了PeeHaa,我学会了如何使用预先准备好的语句来实现这一点。这是获得$myList以返回我正在寻找的阵列的第一步
// REPLACE THE if($stmt->prepare($query)){} SEGMENT WITH THE FOLLOWING
// AND THE SOLUTION WILL BE STARING AT YOU:
if($stmt->prepare($query)){
$stmt->bind_param("iiii", $num, $num1, $num1, $num0);
$stmt->execute() or trigger_error($mysqli->error);
$rows = $stmt->get_result();
while ($row=mysqli_fetch_array($rows)){
echo "<p>" . $row['col1'] . "</p>";
}
}
//将if($stmt->prepare($query)){}段替换为以下内容
//解决方案会一直盯着你看:
如果($stmt->prepare($query)){
$stmt->bind_param(“iiii”、$num、$num1、$num1、$num0);
$stmt->execute()或触发器错误($mysqli->error);
$rows=$stmt->get_result();
while($row=mysqli\u fetch\u数组($rows)){
回声“”$row['col1']。“”;
}
}
根据
fetch_assoc()接受void参数或mysqli_结果。但您将在以下地址发送mysqli_声明:
while mysqli_fetch_assoc($stmt) {
编辑:我看到您正在将结果绑定到变量。如果要填充变量,请使用此循环:
while ($stmt->fetch()) {
()您需要:1)读取错误;2) 阅读手册中的“mysqli_fetch_assoc”条目;3) 检查你写的东西;答案将被揭晓。你知道,我读了“mysqli_fetch_assoc”的手册条目,但不幸的是,我不明白。在那里张贴的例子也不能帮助我了解如何将其应用到准备好的声明中。我可能是错的,我没有看到很多例子显示在php.net页面上使用带有准备语句的基本函数。你对我应该看的具体参考资料有什么建议吗?“我非常感谢。”PeeHaa,我增加了更多的换行符。它可读吗,或者你认为我需要更多的换行符吗?如果它是我的代码,我会删除所有那些单行
if
/else
语句。以及单行上的多个赋值内容$thisCol1=$col1$thisCol2=$col2代码>。那只是等待坏事情发生。如果不是现在,它将在下个月的某个时候,你必须调试它。只是我的2c,但我相信未来你会感谢你:)对于PDO,我知道一个非常好的教程:谢谢你的建议。看起来我可以通过PeeHaa提供的解决方案得到我所需要的东西(见上图)。也就是说,我一定会研究你的建议,因为知道不同的方法来达成相同的目标总是有帮助的。我真的很感激。你们知道,我试过了,它给了我致命的错误:方法名必须是字符串。你们是复制了我的代码,还是自己写的?我相信我复制了您的代码,替换了代码“ThisGivesMeError”版本中的while语句。
while ($stmt->fetch()) {