首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL表锁问题

MySQL表锁问题
EN

Stack Overflow用户
提问于 2013-07-15 09:05:04
回答 1查看 569关注 0票数 2

我认为这可能是一个死锁问题,但我只读取表数据。或者一些我看不见的很简单的东西。

我的$msqli obj可以用于db访问。

但我对这个错误有点困惑..。我被告知clients表没有被LOCK TABLES锁定

欢迎任何建议。谢谢,这是我的PHP代码

代码语言:javascript
复制
$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查询时,它是成功的.谢谢你的帮助..。

********************SOLVED (?) ******************

固定(或似乎是):

来自http://bugs.mysql.com/bug.php?id=6588的报价

“不能在一个查询中多次使用锁定的表--为此使用别名。”

因此,查询被更新为

代码语言:javascript
复制
    $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。无论如何,对于未来的用户,我希望这会有所帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-07-20 02:04:19

虽然有点挑剔,但明智的做法是对$_SESSION‘’user_id‘输入进行加号或mysql_real_escape_string,以避免注入问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17650455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档