一、什么是affectedrows?
在将数据库的操作更新到PHP页面上时,我们可能会关注每个操作更新了多少行数据。affectedrows是指数据库操作执行后,受影响的数据行数,它的值只能在脚本使用查询后所返回的行数相同。这意味着,操作成功时,affectedrows返回刚才在数据库中操作的记录行数。使用affectedrows是一种有效测量查询语句执行所影响的行数的方法,尤其是对于UPDATE、 DELETE和INSERT INTO语句,在PHP中,可以通过mysqli_ affected_ rows()或PDO::rowCount()函数获取affectedrows的值。
二、使用mysqli_affected_rows()实现affectedrows测量
mysqli连接对象是一种用于访问MySQL数据库服务器的连接对象。当使用mysqli操作数据库时,可以用mysqli_affected_ rows()函数返回前一次操作所影响的记录行数。
//建立mysqli连接对象 $conn = mysqli_connect('localhost','username','password','database'); if($conn) { //执行SQL语句 $sql = "UPDATE user SET age =32 WHERE id =1"; mysqli_query($conn,$sql); //获取更新行数 $num = mysqli_affected_rows($conn); //输出更新行数 echo $num; //关闭mysqli连接 mysqli_close($conn); }
三、使用PDO::rowCount()实现affectedrows测量
PDO是PHP Data Objects的缩写,是PHP5中一个为数据访问抽象和数据库交互提供了一种简单和一致的方法的轻量级框架。使用PDO连接数据库时,可以用PDO::rowCount()函数返回前一次操作所影响的记录行数。
//建立PDO连接对象 $conn =new PDO("mysql:host=localhost;dbname=database",'username','password'); if($conn){ //执行SQL语句 $sql = "UPDATE user SET age =32 WHERE id =1"; $conn->exec($sql); //获取更新行数 $num = $conn->rowCount(); //输出更新行数 echo $num; //关闭PDO连接 $conn= null; }
四、使用affectedrows测量INSERT INTO语句的行数
使用INSERT INTO语句时,默认情况下,受影响的行数为1,因为INSERT INTO语句只插入一行数据。但是,如果使用INSERT INTO语句插入多行数据,则affectedrows将返回插入的行数。
//建立mysqli连接对象 $conn = mysqli_connect('localhost','username','password','database'); if($conn) { //执行SQL语句 $sql = "INSERT INTO user(id, name, age) VALUES ('2','zhangsan','18'), ('3','lisi','19'), ('4','wangwu','20')"; mysqli_query($conn,$sql); //获取插入行数 $num = mysqli_affected_rows($conn); //输出更新行数 echo $num; //关闭mysqli连接 mysqli_close($conn); }
五、使用affectedrows测量DELETE语句的行数
使用DELETE语句可以删除一个或多个记录行。在这种情况下,affectedrows会返回删除的行数。
//建立mysqli连接对象 $conn = mysqli_connect('localhost','username','password','database'); if($conn) { //执行SQL语句 $sql = "DELETE FROM user WHERE age >20"; mysqli_query($conn,$sql); //获取删除行数 $num = mysqli_affected_rows($conn); //输出删除行数 echo $num; //关闭mysqli连接 mysqli_close($conn); }
六、总结
使用affectedrows可以第一时间获知数据库操作对于表所影响的行数,这样便于针对性的排除一些问题, 同时,因为affectedrows是数据库返回的结果,所以它的准确性是可以保证的,能够避免像手动检查操作结果的时候这样的人为出错。