我有一个PHP脚本,该脚本使用PDO连接到SQLite数据库。假设数据库看起来像这样(简化):
ID A B
1 foo bar
2 abc xyz
3 def
现在,假设有人使用http://example.com/example.php?b=ghi访问此脚本。然后,脚本应在ID
中找到具有空值的第一行(最低B
)并将ghi
插入B
中。
很明显,我可以使用这样的东西(假设我已经对GET变量b
进行了消毒):
$row = $db->query("SELECT * FROM table WHERE B IS NULL OR B=''")->fetch();
$stmt = $db->prepare("UPDATE table SET B=:b WHERE ID=:id");
$stmt->bindValue(":b", $b);
$stmt->bindValue(":id", $row['ID']);
$stmt->execute();
就我而言,在所有情况下99.99999%都可以正常工作。但是,如果两个用户同时访问脚本,则可能会出现并发问题。他们可以从ID = 3
获得同一行(SELECT
)
语句,然后由任何人猜测哪个值将被另一个值覆盖。
是否有解决此问题的简便方法?
答案 0 :(得分:1)
只需在一个语句中完成所有操作即可。子查询是您的朋友:
let element = this.elementRef.nativeElement;
element.querySelectorAll('.seconds'));