我正在查询服务器并使用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服务器版本对应的手册,以获得使用“IF”的正确语法(在第1行(从INFORMATION_SCHEMA.TABLE中选择*TABLE_S))。
我的MySQL服务器版本是5.6.27,我的PHP解释器是5.6
发布于 2016-06-23 19:35:26
不能只在存储过程中将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
}发布于 2016-06-23 19:49:19
在SQL中没有if (尽管mysql有一个if)
显然,如果表存在,则需要运行查询。更常见的方法是尝试运行查询并检查您收到的错误是否表明表不存在。
例如,如果在mysql命令行应用程序中运行查询,可能会得到以下内容:
mysql> SELECT * FROM appusers;
ERROR 1146 (42S02): Table 'test.appusers' doesn't exist你可以看到两个密码:
mysqli_errno获得)mysqli_sqlstate获得)在您的示例中,检查SQL状态可能更好,因为它涵盖了更多的情况。例如,所有这些mysql错误代码都映射到SQL状态42S02。
https://stackoverflow.com/questions/37999834
复制相似问题