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

约定不等于承诺〃 2023-10-04 11:44 29阅读 0赞

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

代码如下:

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

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

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

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

更正代码:

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

发表评论

表情:
评论列表 (有 0 条评论,29人围观)

还没有评论,来说两句吧...

相关阅读