PHP在SHOW TABLES结果上运行查询

时间:2016-08-08 15:57:08

标签: php mysql mysqli

如何从先前的SHOW TABLES查询中对表运行查询?我要做的是创建一个每24小时运行一次的PHP脚本,通过“已验证”降序和“投票”降序对表进行排序,并为数据库中的每个表更新顶部结果上的“nomnom”。

$result = $conn->query("SHOW TABLES");

if($result->num_rows > 0) {
    while($row = $result->fetch_array()) {
        $sql = "SET @clan = (SELECT clan FROM " . $row[0] . " ORDER BY verified DESC, votes DESC LIMIT 1); UPDATE " . $row[0] . " SET nomnom=0 verified=0; UPDATE " . $row[0] . " SET nomnom=1 WHERE clan=@clan";
        $conn->query($sql);
        echo $row[0] . ' done<br>';
    }
} else {
    echo 'query 0';
}

这正确地回显了每个表名后跟do,但实际上并没有更新表。我错过了什么?

更新

所以我确定以下内容应该有效:

$sql = "SET @clan := (SELECT `clan` FROM " . $row[0] . " ORDER BY `verified` DESC, `votes` DESC LIMIT 1); UPDATE " . $row[0] . " SET `nomnom`=0, `verified`=0; UPDATE " . $row[0] . " SET `nomnom`=1 WHERE `clan`=@clan";

通过回显$ sql并运行通过phpmyadmin返回的查询而不更改任何内容。 这是一条被回应的线。

  

SET @clan:=(SELECT clan FROM aerngardh ORDER BY verified DESC,votes DESC LIMIT 1);更新aerngardh SET nomnom = 0,verified = 0;更新aerngardh SET nomnom = 1 WHERE clan = @ clan

由于某些原因,使用

时实际上并没有这样做
$conn->query($sql); 

更新2

想出一种让它发挥作用的方法。会标记我的答案,但我不能坚持2天......

2 个答案:

答案 0 :(得分:0)

尝试此查询

$sql = SET @clan := (SELECT clan FROM aerngardh ORDER BY verified DESC, votes DESC LIMIT 1); UPDATE aerngardh SET nomnom=0, verified=0; UPDATE aerngardh SET nomnom=1 WHERE clan=@clan

这应该有效

答案 1 :(得分:0)

必须将查询拆分为3个单独的查询。完整的工作代码:

$conn = new MySQLi($servername, $username, $password, $dbname);

$result = $conn->query("SHOW TABLES");

if($result->num_rows > 0) {
    while($row = $result->fetch_array()) {
        $sql = "SET @clan := (SELECT clan FROM " . $row[0] . " ORDER BY verified DESC, votes DESC LIMIT 1);";
        $sql2 = "UPDATE " . $row[0] . " SET nomnom=0, verified=0;";
        $sql3 = "UPDATE " . $row[0] . " SET nomnom=1 WHERE clan=@clan";
        $conn->query($sql);
        echo $conn->error . '<br>';
        $conn->query($sql2);
        echo $conn->error . '<br>';
        $conn->query($sql3);
        echo $conn->error . '<br>';

    }
} else {
    echo 'query 0';
}

如果有人想发布如何使其成为正确的multi_query而不会导致查询不同步错误,请成为我的访客。我做那个哈哈。