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