php中使用PDO 预编译查找结果集返回为空数组

发布于 2022-09-05 10:18:23 字数 1117 浏览 10 评论 0

数据库中有相关数据,但是使用pdo 预处理 返回结果集是空数组,没有明显的报错。求大神看看


<?php 
header("content-type: text/html; charset=utf-8");
$dsn = "mysql:host=localhost; port= 3306;dbname=test;charset=utf8";
$username = "root";
$password = "12345";
$pdo = new PDO($dsn,$username,$password);
//设置错误处理模式为异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//构建预编译SQL语句
$sql = "select * from student where (salary between ? and ?) and edu in ( ? )";
//预编译SQL语句,返回结果集
$PDOStatement = $pdo->prepare($sql);
$PDOStatement->bindValue(1,"10000");
$PDOStatement->bindValue(2,"20000");
$PDOStatement->bindValue(3,"'大专','本科','研究生'");
$PDOStatement->execute();
$rows = $PDOStatement->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);

//抛出异常并捕获错误信息
try{
    
}catch(PDOExcepton $error){
    echo "错误状态码".$error->getCode();
    echo "<br>错误状态码".$error->getCode();
    echo "<br>错误行号".$error->getLine();
    echo "<br>错误错误文件".$error->getFile();
    echo "<br>错误信息".$error->getMessage();
}

结果是:
Array
(
)
[Finished in 1.2s]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你是我的挚爱i 2022-09-12 10:18:23

这类问题应该都是先试试拼接SQL原始语句到数据库查询下,就能知道原因了。

玩物 2022-09-12 10:18:23

问题出在$stmt->bindValue("3","大专");这一行,开始我是用的是一个占位符?代表了三个值edu in ( ? );

   $PDOStatement->bindValue(3,"'大专','本科','研究生'");

现在使用三个占位符分别代表三个值,结果集就有了
edu in (?,?,?);

$stmt->bindValue("3","大专");
$stmt->bindValue("4","本科");

$stmt->bindValue("5","研究生");

<?php
header("content-type:text/html;charset=utf8");
/*

  • @author: NEO

  • @createTime: 2017-08-17, 22:25:29

  • @description: PDO预处理
    */

$dsn ="mysql:host=localhost;dbname=dbname";
$user ="USER";
$password ="PASSWORD";

// 创建PDO对象
try{

$pdo =new PDO($dsn,$user,$password);
// 设置异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// 构建SQL语句,使用参数命名法
$sql ="select * from student where (salary between ? and ?)  and edu in (?,?,?)";
// 预处理
$stmt =$pdo->prepare($sql);
// 绑定参数
$stmt->bindValue("1",10000);
$stmt->bindValue("2",20000);
$stmt->bindValue("3","大专");
$stmt->bindValue("4","本科");
$stmt->bindValue("5","研究生");

// 执行SQL语句
$stmt->execute();

// 获取结果集
$rows =$stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);

}catch(PDOException $e){

// 遇到异常时,输出异常信息
echo $e->getMessage();

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文