PDO::exec()返回值的问题。

wsy87217 2011-09-19 09:37:00
//设置脚本运行时间为不限制
set_time_limit(0);

//用PDO创建pgsql连接
try {
$pgLink = new PDO('pgsql:host=localhost port=5432 dbname=db2 user=root password=111111');
}catch(Exception $e) {
echo $e->getMessage();
}

//定义SQL修改语句
$sql = "UPDATE trade.membership SET gender=1, birth_type=0, name='wsy', birthday='2011-01-01', email='', join_date='2011-01-02', status=1, address='aaaa',id_number='25454', postcode='100031', phone='666', type_id=1 WHERE mobile='110';";

//执行SQL语句
$result = $pgLink->exec($sql);

//输出SQL结果
echo $result.'  '.$sql;

输出结果:
1 UPDATE trade.membership SET gender=1, birth_type=0, name='wsy', birthday='2011-01-01', email='', join_date='2011-01-02', status=1, address='aaaa', id_number='25454', postcode='100031', phone='666', type_id=1 WHERE mobile='110';

问题是这样:
这个表里压根就没有mobile='110'这一行,将$sql语句拿到本地SQL服务器上运行也是“0条影响行数”。
但在程序里的结果为什么是“1”?PDO::exec()的输出结果不应该是增删改的受影响行数吗?
...全文
518 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ethan9516 2012-04-10
  • 打赏
  • 举报
回复
//实例化对象
$pdo = new PDO($db,DB_USER,DB_PWD);
//设置报错方式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//数据表
/*create table account(
id int auto_increment primary key not null, -- 帐户id
money double not null --金额
);
insert into account (id,money) values (1,1000);
insert into account (id,money) values (2,500);
*/

//开启事务
$pdo->beginTransaction();

//从帐户中,转钱到一个不存在的帐户
$count=0;
$count+=$pdo->exec("update account set money=money-300 where id=1");
$count+=$pdo->exec("update account set money=money+300 where id=3");

//根据受影行数,判断是否成功
if($count==2){
//提交事务
$pdo->commit();
echo "转帐成功<br>";
}else{
//回滚事务
echo "转帐失败<br>";
$pdo->rollBAck();
}

===================================
以上代码输出 转帐失败
转帐失败,事务被回滚。
exec()方法返回受影响行数。没有问题。
love_u_qt 2011-09-20
  • 打赏
  • 举报
回复
这个应该是PDO的一个BUG,用预处理做然后用PDO::rowCount()可以正确处理。
wsy87217 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ohmygirl 的回复:]
PDO::exec()
PDO->exec() — Execute an SQL statement and return the number of affected rows,返回的结果应该是sql语句影响的行数。
[/Quote]
是啊。。。我帖子里不是写了“PDO::exec()的输出结果不应该是增删改的受影响行数吗”了吗~~~~
我的问题是,这条SQL语句应该没有影响到行,为什么还会返回1呢?
ohmygirl 2011-09-19
  • 打赏
  • 举报
回复
PDO::exec()
PDO->exec() — Execute an SQL statement and return the number of affected rows,返回的结果应该是sql语句影响的行数。

wsy87217 2011-09-19
  • 打赏
  • 举报
回复
没人吗?

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧