2

これはデッドロックの問題かもしれないと思いますが、テーブル データのみを読み取っています。または、私が見ることができない本当に単純なもの。

私の$msqliobjは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
}

PhpMyAdmin でこの$sqlクエリを実行すると成功します...助けてくれてありがとう..

** * ** * ** * ** * ** * ** * **解決済み (?)** * ** * ** * ** * ** * ** *

修正済み(またはそう思われる):

http://bugs.mysql.com/bug.php?id=6588からの引用

「1 つのクエリでロックされたテーブルを複数回使用することはできません。そのためにはエイリアスを使用してください。」

したがって、クエリは次のように更新されます

    $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。とにかく、将来のユーザーのために、これが役立つことを願っています。

4

1 に答える 1