我正在尝试建立一个先到先得的模型销售页面.我们有n个相同类型的项目.我们希望将这n个项目分配给发出请求的前n个用户.对应于每个项目,有一个数据库行.当用户按下购买按钮时,系统会尝试查找尚未售出的条目(reservationCompleted = FALSE)并更新用户ID并设置reservationCompleted为true.
由于我使用的数据库引擎是InnoDB,我知道有一个内部锁定机制,不允许两个进程在同一行上一次更新.
我的问题是,
如果我正在使用的语句如下,如果两个请求同时到达,这是否会导致不同的用户被分配到同一行?
$query = "UPDATE available_items
SET assignedPhone=".$user->phone.",
reservationCompleted = TRUE,
assignmentCreatedTimestamp =".time()."
WHERE id=".$itemListing['id']."
AND reservationCompleted=FALSE";
$stmt = $pdo->prepare($query);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
考虑以下情况.
两个不同的进程获取相同的行(比如id = 5)并尝试更新DB条目.但其中一人获得了锁定.它更新项目并释放锁定,下一个进程获得锁定.那么,它会在执行更新之前再次验证where条件吗?
如何解析这个字符串:
http://www.ha***ay.ir/pa***nt/result_false.php?error=Canceled%20By%20User
我尝试使用下面给出的代码将给定的字符串转换为字典.但我得到了这个错误:
无法读取数据,因为格式不正确.
这是我的代码:
func webViewDidFinishLoad(_ webView: UIWebView) {
print("finish loading")
let yourTargetUrl = webView.request?.url?.absoluteString
print(yourTargetUrl!)
let parse = convertToDictionary(text: yourTargetUrl!)
}
func convertToDictionary(text: String) -> [String: Any]? {
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)