Php 检查表是否存在的SQL语法有什么问题?

Php 检查表是否存在的SQL语法有什么问题?,php,mysql,sql,database,syntax-error,Php,Mysql,Sql,Database,Syntax Error,我正在使用PHP查询一个服务器并遍历多个数据库,但由于某种原因,我读到的这个$sql2查询在无数线程中工作,返回了一个语法错误: $res = mysqli_query($conn,"SHOW DATABASES"); if (!$res){ // Deal with error } while ($d = mysqli_fetch_array($res)){ $db = $d['Database']; $sql1 = "USE $db"; $query1

我正在使用PHP查询一个服务器并遍历多个数据库,但由于某种原因,我读到的这个$sql2查询在无数线程中工作,返回了一个语法错误:

$res = mysqli_query($conn,"SHOW DATABASES");

if (!$res){
    // Deal with error
}

while ($d = mysqli_fetch_array($res)){

    $db = $d['Database'];

    $sql1 = "USE $db";
    $query1 = mysqli_query($conn, $sql1);

    if (!$query1){
        // Deal with error
    }

    $sql2 = "IF (EXISTS (SELECT *
                 FROM INFORMATION_SCHEMA.TABLE
                 WHERE TABLE_SCHEMA = '$db'
                 AND TABLE_NAME = 'appusers'))
             BEGIN
                 SELECT * FROM `appusers`
             END";

    $query2 = mysqli_query($conn, $sql2);

    if (!$query2){
        // Deal with error
    }
}
这是我收到的错误:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“IF EXISTS SELECT*FROM INFORMATION_SCHEMA.TABLE WHERE TABLE_S”附近使用的正确语法

我的MySQL服务器版本是5.6.27,我的PHP解释器是5.6

您不能将IF语句用作查询,只能在存储过程中使用。您需要执行两个单独的查询

$sql = "SELECT COUNT(*) AS count
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = '$db'
        AND TABLE_NAME = 'appusers'";
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn);
$row = mysqli_fetch_assoc($result);
if ($row['count'] != 0) {
    $sql2 = "SELECT * FROM appusers";
    $query2 = mysqli_query($conn, $sql2);
    ...
} else {
    // deal with error
}
不能将IF语句用作查询,只能在存储过程中使用。您需要执行两个单独的查询

$sql = "SELECT COUNT(*) AS count
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = '$db'
        AND TABLE_NAME = 'appusers'";
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn);
$row = mysqli_fetch_assoc($result);
if ($row['count'] != 0) {
    $sql2 = "SELECT * FROM appusers";
    $query2 = mysqli_query($conn, $sql2);
    ...
} else {
    // deal with error
}
虽然mysql有一个

显然,如果表存在,您希望运行查询。更常见的方法是尝试运行查询,并检查得到的错误是否表示表不存在

例如,如果在mysql命令行应用程序中运行查询,可能会得到以下结果:

mysql> SELECT * FROM appusers;
ERROR 1146 (42S02): Table 'test.appusers' doesn't exist
您会看到两个代码:

1146:内部mysql代码通过 42S02:SQL标准错误状态通过 在您的情况下,检查SQL状态可能更好,因为它涵盖了更多的情况。例如:

1051-未知表“%s” 1109-未知表“%s”位于%s中 1146-表“%s.%s”不存在 虽然mysql有一个

显然,如果表存在,您希望运行查询。更常见的方法是尝试运行查询,并检查得到的错误是否表示表不存在

例如,如果在mysql命令行应用程序中运行查询,可能会得到以下结果:

mysql> SELECT * FROM appusers;
ERROR 1146 (42S02): Table 'test.appusers' doesn't exist
您会看到两个代码:

1146:内部mysql代码通过 42S02:SQL标准错误状态通过 在您的情况下,检查SQL状态可能更好,因为它涵盖了更多的情况。例如:

1051-未知表“%s” 1109-未知表“%s”位于%s中 1146-表“%s.%s”不存在
你不能在查询中使用这种形式的IF,只能在存储的进程和函数中使用。而且你的两个不能与两个相反的相平衡。@KIKOSoftware谢谢你,我现在就改变它,但我认为uuerdo是正确的。在这种情况下,我会写什么?为什么不先执行内部查询,然后在PHP中执行IF?下面是一些如何在MySQL中使用IF的示例:在查询中不能使用IF的形式,只能在存储的过程和函数中使用。而且你的两个并没有与两个相反的平衡。@KIKOSoftware谢谢,我现在将改变这一点,但我认为Uueerdo是正确的。在这种情况下,我会写什么?为什么不先执行内部查询,然后在PHP中执行IF?下面是一些如何在MySQL中使用IF的示例:返回到$result的确切内容是什么?这是查询的结果集。您可以使用它来获取行,或者调用mysqli_num_rows等。此查询返回一行,其中包含符合条件的INFORMATION_SCHEMA.TABLE中的行数。我现在收到以下错误:警告:mysqli_fetch_assoc希望参数1为mysqli_result,布尔值在中给定。为什么$result失败?表的名称是TABLES,而不是table。向$result返回的确切内容是什么?它是查询的结果集。您可以使用它来获取行,或者调用mysqli_num_rows等。此查询返回一行,其中包含符合条件的INFORMATION_SCHEMA.TABLE中的行数。我现在收到以下错误:警告:mysqli_fetch_assoc希望参数1为mysqli_result,布尔值在中给定。为什么$result失败?表的名称是TABLES,而不是table。