【发布时间】:2012-04-06 12:53:02
【问题描述】:
我正在帮助一位朋友使用适合他们业务的基于网络的表单。我正试图让它准备好处理多个用户。我已对其进行设置,以便在显示记录以供编辑之前,我使用以下代码锁定记录。
$query = "START TRANSACTION;";
mysql_query($query);
$query = "SELECT field FROM table WHERE ID = \"$value\" FOR UPDATE;";
mysql_query($query);
(好吧,这已经大大简化了,但这就是mysql的精髓)
它似乎没有工作。但是,当我从命令行直接进入mysql时,使用相同的用户登录并执行
START TRANSACTION;
SELECT field FROM table WHERE ID = "40" FOR UPDATE;
我可以有效地阻止网络表单访问记录“40”并获得超时警告。
我尝试过使用 BEGIN 而不是 START TRANSACTION。我曾尝试先执行 SET AUTOCOMMIT=0 并在锁定后启动事务,但我似乎无法从 PHP 代码中锁定该行。因为我可以从命令行锁定行,所以我认为数据库的设置方式没有问题。我真的希望我在阅读中遗漏了一些简单的东西。
仅供参考,我正在 XAMPP 版本 1.7.3 上进行开发,该版本具有 Apache 2.2.14、MySQL 5.1.41 和 PHP 5.3.1。
提前致谢。这是我第一次发帖,但我过去从这个网站收集了很多知识。
【问题讨论】:
-
第二次 mysql_query($query); 之后你做了什么?如果您的 php 脚本退出,则锁定释放