在命令行,或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) 即可。