- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用以下代码来防止竞争条件是否安全? (key
和status
字段和mysql_affected_rows用来实现加锁)
$mres = mysql_query("SELECT `values`, `key`, `status`
FROM `test`
WHERE `id` = 1");
$row = mysql_fetch_array($mres);
if($row['status'] != UPDATING) {
$mres = mysql_query("UPDATE `test` SET
`status` = UPDATING,
`key` = `key` + 1
WHERE `id` = 1 AND `key` = ".$row['key']);
if($mres && mysql_affected_rows()) {
//update here safely and then...
mysql_query("UPDATE `test` SET
`status` = NOT_UPDATING,
`key` = `key` + 1
WHERE `id` = 1");
}
}
我的测试表明,要么它不安全,要么我应该在我的代码中搜索一个隐藏得很好的错误。表是 MyISAM
最佳答案
在检索值之前,您应该先“获取锁”。否则它们可能会在您获得锁定之前更改。
$mres = mysql_query("UPDATE `test` SET
`status` = 'UPDATING'
WHERE `id` = 1 AND `status` = 'NOT_UPDATING'");
if ($mres && mysql_affected_rows()) {
// got the lock
// now select and update
}
id
最好是数据库中的唯一字段,否则事情可能会很奇怪'UPDATING'
和 'NOT_UPDATING'
比较之前,您还应该检查 $row['status']
是否具有有意义的值(如果它为 false/null 怎么办?)更新中
关于mysql - 使用 mysql_affected_rows 来防止竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11163359/
我的 php 代码中有一个实用程序类,它为一些 mysql 函数提供包装器。其中一个名为 query() 的函数接受查询字符串作为参数,然后执行该查询。在此查询函数中,我想查明给定查询是数据状态更改查
我正在尝试显示受影响的行,但由于某种原因它不起作用。当我运行下面的代码时,PHP 的 mysql_affected_rows() 不显示任何内容。有什么建议 这就是我所拥有的: prepare('DE
我在查询中使用了 mysql_affected_rows,但它似乎返回 false,即使查询确实执行了,所以我有点困惑.... 这是我的: $check = mysql_query("DELETE F
我将此代码用作电子邮件确认脚本的一部分。它工作得很好,除了我想不出一种方法来区分某人何时提供了无效的电子邮件地址与何时他们只是刷新了页面(即已经确认了他们的帐户)。我唯一能想到的就是在始终更新的 us
我们如何使用 mysql_affected_rows() 在存储过程中.. 最佳答案 使用 ROW_COUNT()信息功能。 ROW_COUNT() returns the number of row
我很难解决这个 PHP/MySQL 问题。让我向您展示我的数据库,并说明我的情况: 创建表: CREATE TABLE IF NOT EXISTS `users` ( `id` int(50) N
在我的 PHP INSERT/UPDATE 代码中,我一直为一个相当基本的概念而苦恼。我是否应该始终在每次插入/更新后检查受影响的行数,因为在绝大多数情况下我只执行一次插入/更新并且它似乎导致的问题多
我的代码遇到了一个非常有趣的问题。基本上,当我第一次运行代码时,我从 mysqli_effected_rows() 函数中得到了正确的结果。但是当我第二次运行相同的脚本时,它总是给我“-100” 如果
是否可以使用 mysql_affected_rows 来获取用户进行更新时受影响的行数?如果有多个用户更新密码并且我需要知道每个用户更新是否成功,该怎么办?因此,如果 3 个用户同时进行更新,即使其中
我对 PHP 中的 mysql_affected_rows() 函数有疑问。我使用 MySQL 更新,在 phpMyAdmin 中我可以看到,'confirmed' 从 0 变为 1,但是 mysql
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Warning: mysql_fetch_array(): supplied argument is not
使用以下代码来防止竞争条件是否安全? (key和status字段和mysql_affected_rows用来实现加锁) $mres = mysql_query("SELECT `values`, `k
这个问题在这里已经有了答案: Can I mix MySQL APIs in PHP? (4 个答案) 关闭 7 年前。 我需要更新 mysql 表,并使用 php 获取更新的表数,代码如下所示,
我想做的是:(以编程方式) 更新id为某物的状态,如果没有更新的行,给出错误:我们找不到id为某物的记录,否则给出消息成功。 在这里,我使用 mysql_affected_rows() 来了解某行是否
执行SQL语句时,如 INSERT INTO table ... 在 DUPLICATE KEY UPDATE ...我依靠 mysql_affected_rows() 来确定是否执行了插入或更新。作
mysql_query("update users set balance=balance+'$pwbalance'-'$totalprice' where memberid='$memberid'
我最近在这里问了这个问题:Why doesn't this query produce a mysql_error() result? 建议的解决方案是使用 mysql_affected_rows()
foreach($chk as $key=>$invoiceno) { $QryUp = mysql_query("update `tbl1` set `paid` = 'y' where `in
我遇到了函数 mysql_affected_rows 的奇怪行为,即使数据库中的寄存器发生更改,它也会返回 0。 我已将问题简化为尽可能简单的事情,因此您可以轻松地重现它。 一方面,我有一个文件(pa
我正在从表单上传 csv。我正在尝试使用 mysql_affected_rows 来确定它是否成功。数据正在上传到表中,但 mysql_affected_rows 未评估为真。请帮助: 1) { e
我是一名优秀的程序员,十分优秀!