PHP错误:Fatal error: Uncaught Error: Call to a member function fetch()

PHP在使用PDO访问数据库得到的结果集进行行读时发生错误

Fatal error: Uncaught Error: Call to a member function fetch() on int in E:#PHP\php_SY\SY9\SY9_3_FETCH-ROW.php:17 Stack trace: #0 {main} thrown in E:#PHP\php_SY\SY9\SY9_3_FETCH-ROW.php on line 17

代码如下:

<?php
try {
   $db=new PDO("mysql:host=localhost;dbname=pxscj","root","root");            //实例化PDO类(创建PDO对象)
   //$db=new PDO("sqlsrv:Server=localhost;Database=pxscj;","root","root");    //只需要改DSN(数据库源名)
}
catch (PDOException $e) {                                      //捕获异常--PDOException(Exception的简单重写)
   echo "数据库连接失败:".$e->getMessage();                   //getMessage()--PDOException类中定义的方法
}
$db->exec("set names utf8");                                 //exec()--PDO类的方法(执行没有结果集的SQL语句)
$sql="select * from XSB where 性别=0";                         //SQL语句
$result=$db->exec($sql);                                      //执行SQL语句$sql-返回一个PDOStatement类(型)对象
echo "<table border=1 align='center'>";                        //是一个结果集
echo "<tr><td>学号</td><td>姓名</td><td>总学分</td></tr>";
   while($row=$result->fetch(PDO::FETCH_NUM))   //fetch()是PDOStatement类的方法(从结果集行读)
{                                                           //返回的是一个键名为数字(PDO::FETCH_NUM)数组
   list($XH,$XM,$XB,$CSSJ,$ZY,$ZXF,$BZ)=$row;                //list()将数组中的单元值赋值给变量
   echo "<tr><td>$XH</td><td>$XM</td><td>$ZXF</td></tr>";
}
echo "</table>";
?>

PhpStorm中的提示:
在这里插入图片描述
原因:

$db->exec($sql);	//执行无结果集的SQL语句,返回值为受影响行数
$db->query($sql);	//执行有结果集的SQL语句,返回值为查询结果集

应该把代码中的查询函数更正
exec() - - > query()

更正代码:

<?php
try {
    $db=new PDO("mysql:host=localhost;dbname=pxscj","root","root");            //实例化PDO类(创建PDO对象)
    //$db=new PDO("sqlsrv:Server=localhost;Database=pxscj;","root","root");    //只需要改DSN(数据库源名)
}
catch (PDOException $e) {                                      //捕获异常--PDOException(Exception的简单重写)
    echo "数据库连接失败:".$e->getMessage();                   //getMessage()--PDOException类中定义的方法
}
$db->exec("set names utf8");                         //exec()--PDO类的方法(执行没有结果集的SQL语句)
$sql="select * from XSB where 性别=0";                         //SQL语句
//$result=$db->exec($sql);
$result=$db->query($sql);                                     //执行SQL语句$sql-返回一个PDOStatement类(型)对象
echo "<table border=1 align='center'>";                        //是一个结果集
echo "<tr><td>学号</td><td>姓名</td><td>总学分</td></tr>";
while($row=$result->fetch(PDO::FETCH_NUM))          //fetch()是PDOStatement类的方法(从结果集行读)
{                                                           //返回的是一个键名为数字(PDO::FETCH_NUM)数组
    list($XH,$XM,$XB,$CSSJ,$ZY,$ZXF,$BZ)=$row;                //list()将数组中的单元值赋值给变量
    echo "<tr><td>$XH</td><td>$XM</td><td>$ZXF</td></tr>";
}
echo "</table>";
?>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值