PDO多结果集返回问题

[复制链接]
查看11 | 回复6 | 2021-1-27 07:03:58 | 显示全部楼层 |阅读模式
callltz_pagination('*','db_member','','iddesc',1,10,@total,@count);select@totalastotal;select@countaspagecount;
在执行上述SQL语句的时候
如果不把下面的PDO链接参数PDO::ATTR_ERRMODE和PDO::ATTR_EMULATE_PREPARES注释掉就会报错,求帮助
$params=[
PDO::ATTR_CASE=>PDO::CASE_NATURAL,
//PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS=>PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES=>false,
//PDO::ATTR_EMULATE_PREPARES=>false,
];
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
ATTR_ERRMODE指定PDO的错误处理模式
ATTR_EMULATE_PREPARES指定是否使用预处理
这两个属性并不会影响程序的正确执行,当然你原来就有错,自然还是错了
回避矛盾不是解决问题的办法
多结果集需要用nextRowset()逐个读取
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
$dbh=newPDO('mysql:dbname=db_data;host=localhost;port=3306;charset=utf8','root','root',$params);
$stmt=$dbh->query("callltz_pagination('*','db_member','','iddesc',1,10,@total,@count);select@totalastotal;select@countaspagecount");
try{
$result=array();
do{
$rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
if($rows){
$result[]=$rows;
}
}while($stmt->nextRowset());
$dbh=null;
}catch(PDOException$e){
print"Error!:".$e->getMessage()."
";
die();
}
我这样写的代码,不注释PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION提示错误:Error!:SQLSTATE[HY000]:Generalerror
注释DO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,不注释PDO::ATTR_EMULATE_PREPARES=>false提示错误:Fatalerror:CalltoamemberfunctionfetchAll()onanon-objectinD:\Work\WWW\test.phponline19
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
对呀,你的查询本身就出错了呀!
所以当PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION时,走catch分支
没有PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION时,就是传统的过程化错误信息
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
错误是哪里呢,SQL语句直接在数据库执行没有任何错误啊,返回记录集和记录总数,分页总数三个结果啊
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层





回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
测试了几次,$dbh->query不能执行多个sql语句,那有什么办法,取得第一个结果集中的两个返回参数呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行