sql之update语句返回0

在命令行,或navicat,或php pdo中执行 update语句时,如果更新的值和原来的值相同,则返回0。

如果使用java的jdbc执行,则返回1。

两者的不同的原因是,jdbc计算的是匹配(match)到的行,而pdo计算的是收影响(affect)的行。

这个属性是在获取连接对象时指定的。

例如java指定连接参数:

jdbc:mysql://ip:port/db? useAffectedRows=true&…

或者pdo指定连接信息:(php5.3开始)

<? php
    $p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));  //使用found_rows
?>

使用 found_rows 只能在创建连接时使用,然后就可以在update语句中忽略update相同值带来返回0的影响。

    /**
     * 新增、更新、删除语句
     * @param string $sql
     * @return mixed
     */
    public static function update(string $sql){
        $DB = self::getConn();
        $pre = $DB->prepare($sql);
        $pre->execute();
        return $pre->rowCount();
    }

此时,php的rowCount()无论在update是否重复值,均会返回非零值。

此时,在判断sql是否执行成功,只需要 if($res) 即可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注