关于错误检查,我尝试了$q撸resultSel=$stmtSel->execute()或die(mysqli撸error($q撸resultSel));但它没有输出任何内容
当你检查错误时,你应该在
prepare()
以及
execute()
,因为每种情况下都会出现不同类型的错误。
当你发现错误时
准备()
,这意味着创建语句失败,因此必须从连接获取错误:
$stmtSel = $connSel -> prepare($sqlSel);
if ($stmtSel === false) {
die($connSel->error);
}
当你发现错误时
执行()
,这意味着您有一个语句,但执行该语句失败。所以你必须从语句中得到错误:
$q_resultSel = $stmtSel -> execute();
if ($q_resultSel === false) {
die($stmtSel->error);
}
另一种方法是启用mysqli异常,这样就不必编写任何代码来显式检查错误。如果有错误,它们将通过抛出异常来中断代码执行。
以下是如何启用异常:
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL;
阅读有关错误检查的文档:
我越看你的代码,我发现的错误就越多。
$q_resultSel = $stmtSel -> execute();
你应该看看
docs on the
execute()
function
:
返回值
成功时返回TRUE,失败时返回FALSE。
请注意
执行()
不返回对象,当成功或有错误时返回布尔值。
那意味着
$q_resultSel->fetch_assoc()
即使查询没有问题,也会导致致命错误。使用它总是无效的
->
关于PHP中的布尔值。
if(sizeof($q_resultSel)>0){
检查结果的大小是多余的。因为你唯一能做的就是
>0
就是运行一个
while
循环,你最好跳过
if
条件,因为如果结果有0行,则
虽然
无论如何,循环将立即终止。
while($row = $q_resultSel->fetch_assoc()){
echo $row['username']."<br><br>".$row['comment'];
}
如前所述,您试图调用
$q_resultSel
,这一定是布尔值TRUE或FALSE。这就是致命错误的原因。
相反,您应该在调用
执行()
在确认
执行()
未返回FALSE指示错误:
$ok = $stmtSel -> execute();
if ($ok === false) {
die($stmtSel->error);
}
$q_resultSel = $stmtSel->get_result();
if ($q_resultSel === false) {
die($stmtSel->error);
}
while($row = $q_resultSel->fetch_assoc()){
echo $row['username']."<br><br>".$row['comment'];
}
阅读有关获取结果的文档,并附带代码示例:
请注意
get_result()
是一个只有在PHP安装使用mysqlnd驱动程序时才能使用的函数。默认情况下,大多数现代PHP安装都应该这样做,但您可以通过在shell命令行获取PHP配置信息来进行检查:
php -i
... lots of output ...
mysqlnd
mysqlnd => enabled
... lots more output ...