如何查找我的更新是否成功?我使用where uniqueName = name更新,所以我应该总是只更新0行或1.检查我是否更新了一行的好方法是什么?
答案 0 :(得分:14)
mysql_affected_rows()
将返回受更新影响的行数。
http://us.php.net/manual/en/function.mysql-affected-rows.php
答案 1 :(得分:7)
真的没办法知道它。 假设表tbl_numbers(id,value)有行(1,“one”)和(2,“two”);
$result1="update tbl_numbers set value='first' where id=1";
如果在if子句中检查$ result1,则返回true,mysql_affected_rows()返回1.
然而,$result2="update tbl_numbers set value='two' where id=2";
如果在if子句中检查$ result2,则返回true,mysql_affected_rows()返回0.
而且,$result3="update tbl_numbers set value='three' where id=3";
如果在if子句中检查$ result3,则返回true,mysql_affected_rows()返回0。
答案 2 :(得分:3)
答案 3 :(得分:3)
答案 4 :(得分:2)
那么如果用户重新提交与数据库中的信息相同的数据呢?如果内存服务会返回值为0的mysql_affected_rows(),因为根据定义,在该过程中没有更新任何行。然而查询本身就是成功的。
对此的解决方法是在插入之前证明您的内容或使用:
$result = mysql_query($q);
if( mysql_affected_rows() == 0 )
$state = $result ? "Success" : "Fail";
通过这种方式,您可以检查行是否已更新,如果不是,您可以检查是否出现故障或仅重复数据。
答案 5 :(得分:0)
如果您的更新查询位于名为$ query的变量中,则可以执行;
$result = mysql_query($query);
if($result){
//succes!
} else {
//fail!
}
希望这会有所帮助。如果您只想知道您的查询是否已成功执行,则可以执行此操作。如果您真的想知道受影响的行数,请使用其他建议。
答案 6 :(得分:0)
我已经很晚了,但你总是可以通过改变你的查询来强制失败。
对于列'ID'和'value'的表'foo'。匹配表达式:ID = 4
update foo
join (select ID as nearID,
ID = 4
as matched from foo order by matched desc limit 0, 1) as t on nearID = ID
set value='somedata2'
, ID = if(matched, nearID, 'nomatch')
尽管如此,更改表格以包含更新时间戳或序列号可能更容易。 (因为每次更新都会改变)
答案 7 :(得分:0)
mysql_affected_rows($ link)正确但折旧了.. 现在应该使用mysqli_affected_rows($ link)。
答案 8 :(得分:0)
如果使用PDO,可以使用rowCount()函数获取受影响的行,如下所示:
@Service
public class ApiUserDetailsService implements UserDetailsService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Value("${spring.queries.users.query}")
private String usersQuery;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
List<UserDetails> usersBasedOnUserName = getUsersBasedOnUserName(username);
if (usersBasedOnUserName.size() == 0) {
throw new UsernameNotFoundException("Username " + username + " not found");
}
return usersBasedOnUserName.get(0);
}
private List<UserDetails> getUsersBasedOnUserName(String username) {
return jdbcTemplate.query(this.usersQuery, new String[] {username}, new RowMapper<UserDetails>() {
@Override
public UserDetails mapRow(ResultSet rs, int rowNum) throws SQLException {
String username = rs.getString(1);
String password = rs.getString(2);
return new User(username, password, AuthorityUtils.NO_AUTHORITIES);
}
});
}
}
答案 9 :(得分:0)
If you are using prepared statement..
//query
$stmt = $conn->prepare("UPDATE user SET name = 'Jack' WHERE id = ?");
//bind parameters
$stmt->bind_param("i", $id);
//execute
$stmt->execute();
//updated row count
echo $stmt->affected_rows;
echo " rows updated";