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