//设置脚本运行时间为不限制
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()的输出结果不应该是增删改的受影响行数吗?
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()的输出结果不应该是增删改的受影响行数吗?
PDO->exec() — Execute an SQL statement and return the number of affected rows,返回的结果应该是sql语句影响的行数。
我的问题是,这条SQL语句应该没有影响到行,为什么还会返回1呢?
$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()方法返回受影响行数。没有问题。