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>";
?>