使用2个表中的一个查询删除记录时出现问题

时间:2011-04-24 21:52:29

标签: php mysql

当我在phpMyAdmin中直接尝试时:

DELETE FROM navigation WHERE id='14';DELETE FROM subnavigation WHERE navi_id='14';

它可以正常工作,但当我无法使用我的PHP查询时:

$db->query('DELETE FROM navigation WHERE id='.$id.';DELETE FROM subnavigation WHERE navi_id='.$id.';');

它给了我这个错误,并没有删除任何东西:

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法在'DELETE FROM附近使用   subnavigation WHERE navi_id = 14'at   第1行

我认为我错过了一些非常小的东西! 感谢您的时间和帮助。

3 个答案:

答案 0 :(得分:2)

mysql_query()向与指定link_identifier关联的服务器上的当前活动数据库发送唯一查询(不支持多个查询)。

http://php.net/manual/en/function.mysql-query.php

PhpMyAdmin基于分隔符展开字符串并作为多个查询执行。

如果你想取消这本书(不推荐)

您只需将标志65536作为mysql_connect的5参数(client_flags)传递。该值在/usr/include/mysql/mysql_com.h

中定义
#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */

<强>更新

在第一个表上创建一个触发器,因此ON DELETE它也将从第二个表中删除。

答案 1 :(得分:1)

进行一次查询。

//don't forget to protect yourself from SQL-injection attacks!
$id = mysql_real_escape_string($id);

$delete_query = " DELETE n, sn from navigation n
                  LEFT JOIN subnavigation sn ON (n.id = sn.id)
                  WHERE n.id = '$id' ");
$db->query($delete_query);

答案 2 :(得分:1)

这样的多个语句不是查询,它们形成一个脚本。查看提交SQL脚本。 http://www.shinephp.com/php-code-to-execute-mysql-script/