Fatal error: Uncaught Error: Call to a member function rowCount() on bool

在写php作业的时候,里面有一段是查询语句

<?php
session_start();
// .连接数据库
try {
    $pdo = new PDO("mysql:host=localhost;dbname=test;", "root", "root");
} catch (PDOException $e) {
    die("数据库连接失败" . $e->getMessage());
}
// .防止中文乱码
$pdo->query("SET NAMES 'UTF8'");       // .拼接sql语句,取出信息
$sql = "SELECT * FROM stu WHERE name =".$_SESSION['name'];

$stmt = $pdo->query($sql);//返回预处理对象
if ($stmt->rowCount() > 0) {
    $stu = $stmt->fetch(PDO::FETCH_ASSOC);
}
?>

表面看是没有问题的

但是报错为Fatal error: Uncaught Error: Call to a member function rowCount() on bool in D:\Apache24\htdocs\ex02c.php:21 Stack trace: #0 {main} thrown in D:\Apache24\htdocs\ex02c.php on line 21

 rowCount()需要的应该是返回的一个对象,但现在可能出错,返回了布尔型,就不能调用对象的方法即rowCount()

返回布尔型的原因大概率在sql语句或者数据库的连接上

在上述的代码中,错误就在sql语句上面

$sql = "SELECT * FROM stu WHERE name =".$_SESSION['name'];
其中的.$_SESSION['name']是调用的一个字符串变量,但是在sql语句中,字符串变量应该用''括起来
所以更改为
 $sql = "SELECT * FROM test2 WHERE name ='{$_SESSION['name']}'";

至于以前我也用过这种方法但是没有报错

<?php
    // .连接数据库
    try{
        $pdo = new PDO("mysql:host=localhost;dbname=php;","root","123456");
    }catch(PDOException $e){
        die("数据库连接失败".$e->getMessage());
    }
    // .防止中文乱码
    $pdo->query("SET NAMES 'UTF8'");       // .拼接sql语句,取出信息
    $sql = "SELECT * FROM shangpin WHERE id =".$_GET['id'];
    $stmt = $pdo->query($sql);//返回预处理对象
    if( $stmt->rowCount()> 0){
        $stu = $stmt->fetch(PDO::FETCH_ASSOC);//按照关联数组进行解析
    }else{
        die("没有要修改的数据!");
    }
    ?>

原因是里面的.$_GET['id']是int型变量,在sql语句中可以直接拼接,所以没有问题。

posted @ 2022-05-31 13:38  椅念琼  阅读(865)  评论(0编辑  收藏  举报