【问题标题】:Error Number: 1064 (DELET with sql JOIN) [closed]错误号:1064(使用 sql JOIN 删除)[关闭]
【发布时间】:2011-10-21 12:31:29
【问题描述】:

我想用 sql JOIN 删除两个数据库表(mysql)中的 ROW,但得到错误:

这是我的sql代码:

table_1.id => 有一行 id 3
table_2.rela => 有三行有真正的3(有时是数字行table_2.rela join with table_1.id 是 1 or 5 or 2 or ...)

  //$id = $this->input->post('id');
    $id = '3';
        $this->db->query("
        DELETE *
        FROM table_1
        JOIN  table_2
           ON table_1.id = table_2.rela
        WHERE table_1.id = '.$id.'");

通过上面的查询,我得到了这个错误:

发生数据库错误
错误号:1064

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '* FROM table_1 JOIN table_2 ON table_1' 附近。在第 1 行

DELETE * FROM table_1 JOIN table_2 ON table_1.id = table_2.rela WHERE table_1.id = '.3.'

如何解决?

【问题讨论】:

  • 看看我的回答,你就会明白为什么没有删除

标签: php codeigniter join


【解决方案1】:

您不能在DELETE 之后使用通配符。您必须指定要从中删除记录的表。您的查询应该是这样的:

$this->db->query("
        DELETE table_1, table_2
        FROM table_1
        JOIN  table_2
           ON table_1.id = table_2.rela
        WHERE table_1.id = ".floor($id));

假设 id 是 int。如果 $id 可能来自用户输入,这也会删除无效字符。

【讨论】:

  • Op 想要删除两个表中的行
  • 我编辑了我的答案。我也添加了另一张桌子。在DELETE 之后,您只需指定要从中删除的所有表。
  • 还是sql字符串的问题
  • 阅读我的答案,我在那里解释
  • 不适用于删除行。我该怎么办?
【解决方案2】:

您应该在FROM 子句之前至少提及一个表名,您要从中删除匹配的行。如果要从两个表中删除匹配的行,请提及以逗号分隔的两个表。

$this->db->query("
        DELETE table_1
        FROM table_1
        JOIN  table_2
           ON table_1.id = table_2.rela
        WHERE table_1.id = '".$id."'");

【讨论】:

  • 他想删除两个表中的行
  • @LaurenceBurke:他可以把两个表名用逗号隔开
  • 他的问题仍然不仅仅是他的 sql 字符串关闭
  • 您的代码没有错误,也没有删除。为什么?
  • @Mehdi:因为您错误地绑定了 PHP 变量 $id 。检查更新的查询
【解决方案3】:
$id = '3';
    $this->db->query("
    DELETE table_1, table_2
    FROM table_1
    JOIN  table_2
       ON table_1.id = table_2.rela
    WHERE table_1.id = $id");

同样在你原来的问题中,你使用了错误的字符串,你 $id 用双引号括起来,你使用 single 来尝试连接......因为它在双引号中,你的 $id 很可能是你不知道的数字'不需要为 sql 用单引号括起来……你只需要"table_1.id = $id";

【讨论】:

  • 如果想在这个sql中添加几个表进行删除,是怎么回事?
  • 好吧,他可能会被注射,因为这个$id = '3';只能是一个测试。只是彻底:)
  • @Nikoloff OP很难理解甚至试图通过简单修复他的答案来向他解释什么我认为sql注入检查很难用他的语言障碍
  • 同意,我已经后悔打开这个问题了...
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多