PHP/MYSQL Select语句在数据库中运行时仍引发错误

PHP/MYSQL Select语句在数据库中运行时仍引发错误,php,mysql,mysqli,Php,Mysql,Mysqli,我知道以前有人问过我这个问题,但我花了很多时间仔细阅读了这些回答,没有找到任何能为我指明正确方向的东西 我有以下代码: <?php $connSel = OpenCon(); $sqlSel = 'SELECT * FROM sitecomments'; $stmtSel = $connSel -> prepare($sqlSel); $q_resultSel = $stmtSel -> execute(); if(sizeof($q_resultSel)>0){

我知道以前有人问过我这个问题,但我花了很多时间仔细阅读了这些回答,没有找到任何能为我指明正确方向的东西

我有以下代码:

<?php
$connSel = OpenCon();
$sqlSel = 'SELECT * FROM sitecomments';
$stmtSel = $connSel -> prepare($sqlSel);
$q_resultSel = $stmtSel -> execute();

if(sizeof($q_resultSel)>0){
    while($row = $q_resultSel->fetch_assoc()){
        echo $row['username']."<br><br>".$row['comment'];
    }
}
else{
    echo '<i>No comments yet</i>';
}
?>
与查询失败时一样返回false,因此迭代无效。我试图在$q_resultSel中查找行数,但得到消息“尝试获取非对象的属性”,因此我不确定我是否理解在以前的文章中找到的特定错误检查方法

任何想法都将不胜感激。

sizeof()
更改为
$stmtSel->num_rows

    $connSel = OpenCon();
    $sqlSel = 'SELECT * FROM sitecomments';


    if($stmtSel = $connSel -> prepare($sqlSel)){   
    $q_resultSel = $stmtSel -> execute(); 
    $stmtSel ->store_result();
    if($stmtSel->num_rows>0){      
      $result = $q_resultSel->get_result();
        while ($row = $result->fetch_array(MYSQLI_NUM)){
            echo $row['username']."<br><br>".$row['comment'];
        }
    }
}
    else{
        echo '<i>No comments yet</i>';
    }
$connSel=OpenCon();
$sqlSel='SELECT*fromsitecomments';
如果($stmtSel=$connSel->prepare($sqlSel)){
$q_resultSel=$stmtSel->execute();
$stmtSel->store_result();
如果($stmtSel->num_rows>0){
$result=$q_resultSel->get_result();
而($row=$result->fetch_数组(MYSQLI_NUM)){
echo$row['username']。“

”$row['comment']; } } } 否则{ 回应“还没有评论”; }
sizeof()
更改为
$stmtSel->num_行

    $connSel = OpenCon();
    $sqlSel = 'SELECT * FROM sitecomments';


    if($stmtSel = $connSel -> prepare($sqlSel)){   
    $q_resultSel = $stmtSel -> execute(); 
    $stmtSel ->store_result();
    if($stmtSel->num_rows>0){      
      $result = $q_resultSel->get_result();
        while ($row = $result->fetch_array(MYSQLI_NUM)){
            echo $row['username']."<br><br>".$row['comment'];
        }
    }
}
    else{
        echo '<i>No comments yet</i>';
    }
$connSel=OpenCon();
$sqlSel='SELECT*fromsitecomments';
如果($stmtSel=$connSel->prepare($sqlSel)){
$q_resultSel=$stmtSel->execute();
$stmtSel->store_result();
如果($stmtSel->num_rows>0){
$result=$q_resultSel->get_result();
而($row=$result->fetch_数组(MYSQLI_NUM)){
echo$row['username']。“

”$row['comment']; } } } 否则{ 回应“还没有评论”; }
$stmtSel->execute()
-返回布尔值。因此,您试图对布尔值调用方法
fetch\u assoc()
,这是错误的。
尝试替换:

q_resultSel = $stmtSel -> execute();

$stmtSel->execute()
-返回布尔值。因此,您试图对布尔值调用方法
fetch\u assoc()
,这是错误的。
尝试替换:

q_resultSel = $stmtSel -> execute();

关于错误检查,我尝试了$q_resultSel=$stmtSel->execute()或die(mysqli_error($q_resultSel));但它什么也没有输出

检查错误时,应在每次
prepare()
和每次
execute()
之后进行检查,因为每种情况下都会发生不同类型的错误

当您在
prepare()
上遇到错误时,这意味着创建语句失败,因此您必须从连接中获取错误:

$stmtSel = $connSel -> prepare($sqlSel);
if ($stmtSel === false) {
    die($connSel->error);
}
当您在
execute()
上遇到错误时,表示您有一条语句,但执行该语句失败。因此,您必须从语句中获取错误:

$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();
你应该阅读:

返回值

成功时返回TRUE,失败时返回FALSE

请注意,
execute()
不返回对象-无论是成功还是出错,它都返回布尔值

这意味着即使查询没有问题,
$q\u resultSel->fetch\u assoc()
也必然会导致致命错误。在PHP中对布尔值使用
->
总是无效的

if(sizeof($q_resultSel)>0){
检查结果的大小是多余的。因为如果它是
>0
的话,你唯一要做的就是在它上面运行
while
循环,你最好跳过
if
条件,因为如果结果有0行,那么
while
循环无论如何都会立即终止

while($row = $q_resultSel->fetch_assoc()){
    echo $row['username']."<br><br>".$row['comment'];
}
阅读有关get_结果的文档,并提供代码示例:

请注意,
get_result()
是一个只有在PHP安装使用mysqlnd驱动程序时才能使用的函数。大多数现代PHP安装默认情况下都应该这样做,但您可以通过在shell命令行获取PHP配置信息进行检查:

php -i

... lots of output ...

mysqlnd

mysqlnd => enabled

... lots more output ...
关于错误检查,我尝试了$q_resultSel=$stmtSel->execute()或die(mysqli_error($q_resultSel));但它什么也没有输出

检查错误时,应在每次
prepare()
和每次
execute()
之后进行检查,因为每种情况下都会发生不同类型的错误

当您在
prepare()
上遇到错误时,这意味着创建语句失败,因此您必须从连接中获取错误:

$stmtSel = $connSel -> prepare($sqlSel);
if ($stmtSel === false) {
    die($connSel->error);
}
当您在
execute()
上遇到错误时,表示您有一条语句,但执行该语句失败。因此,您必须从语句中获取错误:

$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();
你应该阅读:

返回值

成功时返回TRUE,失败时返回FALSE

请注意,
execute()
不返回对象-无论是成功还是出错,它都返回布尔值

这意味着即使查询没有问题,
$q\u resultSel->fetch\u assoc()
也必然会导致致命错误。在PHP中对布尔值使用
->
总是无效的

if(sizeof($q_resultSel)>0){
检查结果的大小是多余的。因为如果它是
>0
的话,你唯一要做的就是在它上面运行
循环,你最好跳过
if
条件,因为如果结果有0行,t