我需要检查一个表是否存在,然后再从sql中删除一行。我已经尝试过互联网上的一些东西,这似乎最多,但它没有用。
IF OBJECT_ID('mytable', 'N') IS NOT NULL
BEGIN
DELETE FROM table WHERE user_id= :user_id
END
我收到错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF OBJECT_ID('we_image_gallery', 'U') IS NOT NULL DELETE FROM mytable' at line 1
我需要一个只使用当前数据库的解决方案,我可以依赖脚本移植到多个系统。
编辑:此查询由PHP PDO运行。没有任何答案似乎工作,我的pdo或sql服务器中是否有可能导致问题的设置?
答案 0 :(得分:0)
Using Exists statement to delete data from table:
IF EXISTS(SELECT 1 FROM Your_table WHERE user_id = user_id)
BEGIN
DELETE FROM Your_table WHERE user_id= user_id
END
Delete table from database :
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =
'TheSchema' AND TABLE_NAME = 'TheTable')
BEGIN
--Your delete statement
END
答案 1 :(得分:0)
您可以通过在 where子句中提供表名来检查任何表的 INFORMATION_SCHEMA.TABLES ,如果该表存在,则可以执行以下所需的操作:< / p>
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'tbl_User')
BEGIN
--If table exist you can perform your operation here
-- DELETE FROM table WHERE user_id= :user_id
Print 'Table Exists'
END
答案 2 :(得分:0)
MySQL在动态SQL解析器中不支持IF
语句。您只能在存储的例程或触发器的主体中使用flow-control statements。
我建议在这里采用两种策略之一。一种选择是简单地尝试像DELETE这样的语句,但要检查错误。如果您启用了PDO例外,则捕获异常。
try {
$pdo->exec("DELETE ...");
} catch (PDOException $e) {
error_log("SQL statement on $mytable failed: ".$e->getMessage());
}
mytable上的SQL语句失败:SQLSTATE [42S02]:未找到基表或视图:1146表&#39; test.mytable&#39;不存在
另一种策略是查询表格,如果它存在/不存在则执行某些操作。
try {
$stmt = $pdo->query("SHOW TABLES LIKE 'mytable'");
if (!$stmt->fetchColumn()) {
error_log("No such table 'mytable'");
}
} catch (PDOException $e) {
echo "SQL statement failed: " . $e->getMessage() . "\n";
}