如果有一段难以解决的代码..而且我不知道如何找到错误而不是这个。
while($this->_pathLus != $this->hoofdMap) { //loop works fine, tested and confirmd
echo $this->_pathLus . 0; //$this->_pathLus = <data4>
if ($stmtToegang = $db->prepare("SELECT <data>, <data2> FROM `<data3>` WHERE <data> = ? LIMIT 5")) {
$stmtToegang->bind_param("s",$this->_pathLus);
$stmtToegang->execute();
$stmtToegang->bind_result($<data>, $<data2>);
while ($stmtToegang->fetch()) {
echo $<data> . 1;
echo $stmtToegang->error . 2;
}
} else { //to be sure if-stmt-prep is FALSE
echo $stmtToegang->error . 3;
}
$this->_pathLus = preg_replace("/(.*)\/(.*)\/(.*)\//", "$1/$2/", $this->_pathLus); // part of Loop and works
}
我做了什么来找到解决方案:
结果:
<data4>03<data4>03<data4>03<data4>03<data4>03
<data4>03<data4>03<data4>03
<data4>03<data4>03<data4>03<data4>03
<data4>03<data4>03
<data4>03
<data4>03<data4>03
注意: <data>
,<data2>
,<data3>
是此示例的替代
提前致谢
编辑:更正
编辑:
mysqli_prepare()返回一个语句对象,如果有错误则返回FALSE 发生了。
但是如何得到发生的错误?
答案 0 :(得分:1)
我是如何找到问题的:
我将echo $stmtToegang->error . 3;
改为echo $db->error . 3;
这样我发现了以下错误:
命令不同步;你现在不能运行这个命令
我找到了解决方案: description
问题是这个stmt-query(选择类型)是另一个stmt-query(选择类型)的一部分,因为:
默认情况下,mysqli使用无缓冲的查询(对于预处理语句;)
所以调试嵌套预准备语句(select-type)的代码如下:
if($stmt = $mysqli->prepare($sql)) {
<$stmt->bind_param()->execute()->bind_result() code>
$stmt->store_result(); // store them !important
while ($stmt->fetch()) {
//code
if($stmt2 = $mysqli->prepare($sql)) {
<$stmt2->bind_param()->execute()->bind_result() code>
$stmt2->store_result(); // store them !important
while ($stmt2->fetch()) {
//code
}
$stmt2->free_result(); // free them
$stmt2->close(); // close them
echo $stmt2->error; // report error
} else {
echo $mysqli->error; // report error
}
}
$stmt->free_result(); // free them
$stmt->close(); // close them
echo $stmt->error; // report error
} else {
echo $mysqli->error; // report error
}
//edit: <$stmt->bind_param()->execute()->bind_result() code> for an better view
希望它可以帮助somone