Php 检查表是否存在的SQL语法有什么问题?
我正在使用PHP查询一个服务器并遍历多个数据库,但由于某种原因,我读到的这个$sql2查询在无数线程中工作,返回了一个语法错误: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
$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。