gpt4 book ai didi

我应该关心 PHP mysql_affected_rows() 吗?

转载 作者:行者123 更新时间:2023-12-01 00:51:07 26 4
gpt4 key购买 nike

在我的 PHP INSERT/UPDATE 代码中,我一直为一个相当基本的概念而苦恼。我是否应该始终在每次插入/更新后检查受影响的行数,因为在绝大多数情况下我只执行一次插入/更新并且它似乎导致的问题多于通过检查只有一行受到影响而解决的问题.

下面是我执行 INSERT/UPDATE 的标准代码,如果用户更新记录而不更改任何内容,则此代码失败,因为受影响的行将为 0。我可以编写代码来检查至少一个字段已更改但是在大表格上,这看起来很笨重,我想知道它是否真的值得,因为我从来没有真正通过检查这个数字发现任何错误。

<?php
$whereSql = '';
$groupSql = 'INSERT INTO';

if(isset($_POST['id']) && is_numeric($_POST['id'])){
$groupSql = 'UPDATE';
$whereSql = 'WHERE id = ' . $_POST['id'];
}

$groupSql .= ' sometable SET name="' . $name . '" ' . $whereSql;

$groupDb = mysqli_query($groupSql, $dbObject) or die("Login DB error:".mysql_error());

if(mysqli_affected_rows($dbObject) == 1){
//redirect
}else{
die('System Error');
}

最佳答案

您应该检查查询的返回值。不影响/返回任何行的选择/更新查询不是错误情况,它只是一个空结果集,或者碰巧什么都不影响的更新。

$result = mysql_query($sql) or die(mysql_error());
^^^^^^^^^^^^^^^^^^^^^

考虑一个检查匹配用户名是否存在的用户注册系统:

SELECT id FROM users WHERE username='foo';

如果用户 foo 不存在,您的系统将呕吐并声称发生了错误。但是空结果集不是错误。它仅表示该用户名可供用户使用。

对于处理成绩的系统也是如此:

UPDATE students SET failed=true WHERE score < 50;

获得 0 个受影响的行不是失败。这只是意味着所有学生都通过了。

关于我应该关心 PHP mysql_affected_rows() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com