PHP挂起MySQL删除语句

时间:2011-08-17 21:16:20

标签: php mysql connection sql-delete

我正在尝试从PHP脚本中的MySQL数据库(innodb)中删除一行数据。但是,PHP脚本不是删除,而是挂起查询。这是一个非常简单的删除声明:

`mysqli_query($conn, 'delete from picture where idPicture = "'. $temp . '"');'

如果我回显删除字符串并将其粘贴到MySQL查询窗口中,则该语句将正常执行。使用xdebug进行调试显示了与上述删除语句相同的内容。

mysqli_error()给出了一个输出:

  

超过锁定等待超时;尝试重新启动交易

如果我尝试关闭连接,之后我收到此错误:

  

警告:mysqli_close()[function.mysqli-close]:无法在

中获取mysqli

我猜这是正常的,因为连接超时了。 我也对其他删除/选择语句使用相同的连接,它们都表现良好。

如果有人能够解释我做错了什么,那将非常感激。

2 个答案:

答案 0 :(得分:4)

Lock wait timeout exceeded; try restarting transaction 换句话说,表已锁定且无法访问。确保没有其他MySQL会话访问此表(例如,可能会挂起一些持久连接)。

COMMIT / ROLLBACK与此表有任何关系的任何其他事务。

尝试获取明确的LOCK以进行删除。

在此处查看更多内容:http://dev.mysql.com/doc/refman/5.5/en/lock-tables-and-transactions.html

答案 1 :(得分:0)

你有一些东西在你想要删除的记录上持有一个或多个锁。可能是一个活跃的交易。您将不得不深入了解进程列表show innodb status等等,以确定它是哪一个。如果是InnoDB事务,'show innodb status'将把事务数据隐藏在输出的中间。

最快的解决方案是重新启动mysql,它会终止所有事务和锁定,但是你可能会在短时间内再次遇到这个问题。你必须弄清楚这个锁是什么,以及为什么它没有被释放。