我认为这可能是一个死锁问题,但我只是读表数据。或者真的很简单,我看不到。MySQL表锁问题
我$msqli
obj是罚款DB访问
但我有点难倒了这个错误.. 我被告知clients
表没有被锁定,LOCK TABLES
任何建议都欢迎..谢谢 这是我的PHP代码
$mysqli = $GLOBALS['mysqli'];
$mysqli->query("LOCK TABLES clients READ, invoices READ, estimates READ");
$mysqli->query("SET @inv='Invoice'");
$mysqli->query("SET @est='Estimate'");
$sql = " (SELECT @inv, name AS client, invoices.id, invoices.ref AS ref, invoices.addTs AS ts \n"
. "FROM `clients` , `invoices` \n"
. "WHERE invoices.user_id = " . $_SESSION['user_id'] . " \n"
. "AND clients.id = invoices.client_id)\n"
. "UNION ALL\n"
. "(SELECT @est, name as client, estimates.id, estimates.ref AS ref, estimates.addTs AS ts \n"
. "FROM `clients` ,`estimates` \n"
. "WHERE estimates.user_id = " . $_SESSION['user_id'] . " \n"
. "AND clients.id = estimates.client_id) \n"
. "ORDER BY ts DESC LIMIT 5";
if ($result = $mysqli->query($sql) or die(mysqli_error($mysqli))) {
//Do stuff here
}
当我运行此$sql
查询在phpMyAdmin它是成功的? 感谢您的帮助..
** * ** * ** * ** * ** * ** * **解决( ?) ** * ** * ** * ** * ** * ** *
固定(或者似乎是):
报价从http://bugs.mysql.com/bug.php?id=6588
“你不能用一个锁表多次在一个查询中 - 为此使用别名。“
因此,作为
$mysqli->query("LOCK TABLES clients_t READ,clients READ ,
invoices READ, estimates READ");
$mysqli->query("SET @inv='Invoice'");
$mysqli->query("SET @est='Estimate'");
$sql = " " .
"(SELECT @inv, name AS client, invoices.id,
invoices.ref AS ref, invoices.addTs AS ts "
. "FROM `clients` AS clients_t , `invoices`\n"
. "WHERE invoices.user_id = " . $_SESSION['user_id'] . " \n"
. "AND clients_t.id = invoices.client_id)\n"
. "UNION ALL \n"
. "(SELECT @est , name AS client, estimates.id,
estimates.ref AS ref, estimates.addTs AS ts\n"
. "FROM `clients` ,`estimates` \n"
. "WHERE estimates.user_id = " . $_SESSION['user_id'] . " \n"
. "AND clients.id = estimates.client_id)\n"
. "ORDER BY ts DESC LIMIT 5";
我还需要锁定表的别名clients_t
查询被更新。 无论如何,对于未来的用户,我希望这有助于。
请提供确切错误信息 – Tarik
错误消息是'表'客户'没有锁定LOCK TABLES'。我可能应该提到这个查询以前是有用的,但是我昨晚在工作了几个小时,我看不到会影响查询。此外,如果我将'$ sql'更改为“SELECT * FROM clients',它将起作用...所以我怀疑'$ sql'是问题 – bockymurphy