我正在查询服务器并使用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附近使用正确的语法(EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLE WHERE TABLE_S'在第1行
我的MySQL服务器版本是5.6.27,我的PHP解释器是5.6
答案 0 :(得分:2)
您不能将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
}
答案 1 :(得分:0)
SQL中没有if
(尽管mysql有function called if
)
显然,如果表存在,您希望运行查询。更常见的方法是尝试运行查询并检查您获得的错误是否表示该表不存在。
E.g。如果您在mysql
命令行应用程序中运行查询,则可能会得到以下结果:
mysql> SELECT * FROM appusers;
ERROR 1146 (42S02): Table 'test.appusers' doesn't exist
您会看到两个代码:
mysqli_errno
获取此内容)mysqli_sqlstate
获取此信息)在您的情况下,检查SQL状态可能会更好,因为它涵盖了更多的情况。例如,all of these mysql error codes map to SQL state 42S02: