PDOstament对象执行execute()函数,只要是sql语句正确都是返回true

PDOstament对象执行execute()函数,只要是sql语句正确都是返回true

【PDO对象操作数据库】

PDOstament对象执行execute()函数,只要是sql语句正确都是返回true。

问题:

想要PDO对象实现更改一条记录, 并修改是否成功要返回信息给用户。

上我的代码:

复制代码
//PDO对象实现更改一条记录
    
    $sql4= "update xs_user set `passwd`=md5('123') where `username`=? and `sex`=?";
    echo $sql4;
    $stmt = $pdo->prepare($sql4);
    $username = "bright009";
    $sex = "女";                        //一种是直接写在execute的参数array()带进去,一种是通过绑定参数法
    $stmt->bindParam(1, $username);
    $stmt->bindParam(2, $sex);
    $flag4 = $stmt->execute();
//当返回值为真时,就表示修改成功
    if($flag){                        //array('bright006','男')当查询的条件多个时,直接按序写在array数组里面即可
      
         $data = $stmt->fetch();
         $smarty->assign("flag","ok");
         
    }else{
         $smarty->assign("flag","fail");
    }
$smarty -> display("test.tpl");
   
复制代码

我错误的原因是:

把PDOstament对象执行execute()函数后返回的值误以为成修改成功或失败。其实执行execute函数,只要sql语句正确,返回值都是false,所以我这里所写的sql语句是正确的,但是在数据库中并没有此记录,它仍然是返回true,所以我就卡在这里了。

多次查看手册+百度无果,上群问其他人还真是一个好方法。

 

解决方法:

既然自己要返回一个是否修改成功的信息给用户,可以使用一个rowCount()函数统计被影响的行数$res,然后根据$res是否>0做判断就好了。

改后的代码:

复制代码
//PDO对象实现更改一条记录
    
    $sql4= "update xs_user set `passwd`=md5('123') where `username`=? and `sex`=?";
    echo $sql4;
    $stmt = $pdo->prepare($sql4);
    $username = "bright009";
    $sex = "女";                        //一种是直接写在execute的参数array()带进去,一种是通过绑定参数法
    $stmt->bindParam(1, $username);
    $stmt->bindParam(2, $sex);
    $flag4 = $stmt->execute();
    $res = $stmt->rowCount();
    if($res>0){                        //array('bright006','男')当查询的条件多个时,直接按序写在array数组里面即可
      
         $data = $stmt->fetch();
         $smarty->assign("flag","ok");
         
    }else{
         $smarty->assign("flag","fail");
    }
  $smarty -> display("test.tpl");
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值