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语句中可以直接拼接,所以没有问题。