2017-02-21 81 views
0

我需要检查一个表是否存在,然后在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

这种问题是不良设计的症状 – Strawberry

+0

这实际上引发了另一个问题。创建一个额外的表来存储已创建的表(通过在不同的景点上安装不同的附加组合),并使用它来检查表,或者使用我的当前系统使用sql检查表声明。 – Zaper127

+0

您目前的系统非常糟糕,但您提出的替代方案同样糟糕。你应该知道你的数据库中有什么表。它不应该是猜测的问题。 – Strawberry

回答

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 
+0

这没有奏效。我在我的问题中添加了一些信息。 – Zaper127

0

您可以通过在给表名在任何表INFORMATION_SCHEMA.TABLES检查where子句以及如果然后该表存在,你可以执行你所需的操作如下:

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 
+0

这没有奏效。我在我的问题中添加了一些信息。 – Zaper127

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()); 
} 

SQL statement on mytable failed: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.mytable' doesn't exist

另一种策略是查询表,并做一些事情,如果它/它不存在。

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"; 
} 
相关问题