Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL/PHP中从多个表中删除的正确语法_Php_Mysql_Sql_Mysqli - Fatal编程技术网

MySQL/PHP中从多个表中删除的正确语法

MySQL/PHP中从多个表中删除的正确语法,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,下面的每一行都是单独工作的,但我想将它们合并到一个查询中 $query4="DELETE FROM a WHERE email = '$email'"; $query2="DELETE FROM b WHERE email = '$email'"; $query3="DELETE FROM c WHERE email = '$email'"; $query1="DELETE FROM d WHERE email = '$email'"; $result = mysqli_query($con,

下面的每一行都是单独工作的,但我想将它们合并到一个查询中

$query4="DELETE FROM a WHERE email = '$email'";
$query2="DELETE FROM b WHERE email = '$email'";
$query3="DELETE FROM c WHERE email = '$email'";
$query1="DELETE FROM d WHERE email = '$email'";
$result = mysqli_query($con, $query[1-4, depending]) or die(mysqli_error($con));
我尝试了许多不同的方法。从MySQL文档来看,应该简单到:

$query="DELETE FROM a, b, c, d WHERE email = '$email'";
$result = mysqli_query($con, $query) or die(mysqli_error($con));
我也尝试过使用backticks,如下所示:

$query="DELETE FROM `a`, `b`, `c`, `d` WHERE email = '$email'";
我试着将四行连接成一个分号分隔的长字符串

除了四行之外,其他所有行都给了我一个SQL语法错误:

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在“WHERE email=”附近使用的正确语法xxxxxx@yyyyyyyyy.com“”位于第1行

我检查了db用户是否有删除权限(当然他们有,因为单独运行时它工作正常)

在单独的语句中这样做相对简单,但我只是有点困惑,为什么它在这一点上不起作用。出于好奇,我想解决这个问题

我确实发现了
mysqli\u multi\u query()
命令…mysqli是否将“…a、b、c、d…”部分视为单独的查询


谢谢你能提供的任何帮助!(请注意,我省略了db连接线,因为它连接良好。)再次…谢谢

实际上,我们无法在MySQL中执行“JOIN”删除。一个好方法是将所有指令发送到同一事务中,如下所示:

DELIMITER $$
DELETE FROM TABLE1 WHERE ...;
DELETE FROM TABLE2 WHERE ...;
DELETE FROM TABLE3 WHERE ...;
DELETE FROM TABLE4 WHERE ...;
...
DELIMITER $$

实际上,我们无法在MySQL中执行“JOIN”删除。一个好方法是将所有指令发送到同一事务中,如下所示:

DELIMITER $$
DELETE FROM TABLE1 WHERE ...;
DELETE FROM TABLE2 WHERE ...;
DELETE FROM TABLE3 WHERE ...;
DELETE FROM TABLE4 WHERE ...;
...
DELIMITER $$

实际上,我们无法在MySQL中执行“JOIN”删除。一个好方法是将所有指令发送到同一事务中,如下所示:

DELIMITER $$
DELETE FROM TABLE1 WHERE ...;
DELETE FROM TABLE2 WHERE ...;
DELETE FROM TABLE3 WHERE ...;
DELETE FROM TABLE4 WHERE ...;
...
DELIMITER $$

实际上,我们无法在MySQL中执行“JOIN”删除。一个好方法是将所有指令发送到同一事务中,如下所示:

DELIMITER $$
DELETE FROM TABLE1 WHERE ...;
DELETE FROM TABLE2 WHERE ...;
DELETE FROM TABLE3 WHERE ...;
DELETE FROM TABLE4 WHERE ...;
...
DELIMITER $$
你可以用它来做

DELETE a, b, c, d 
FROM a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
第二种语法是使用:

DELETE FROM a, b, c, d 
USING a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
这也应该行得通

注意

要求:要删除的电子邮件必须在表a中至少有一行

请参阅语法文档:

对于第一个多表语法,仅从 删除FROM子句之前列出的表。第二次 多表语法,仅匹配中列出的表中的行 删除FROM子句(在USING子句之前)。效果是 您可以同时从多个表中删除行,并且 仅用于搜索的其他表:

从t1内部联接t2内部联接t3中删除t1、t2
其中t1.id=t2.id,t2.id=t3.id

你可以用它来做

DELETE a, b, c, d 
FROM a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
第二种语法是使用:

DELETE FROM a, b, c, d 
USING a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
这也应该行得通

注意

要求:要删除的电子邮件必须在表a中至少有一行

请参阅语法文档:

对于第一个多表语法,仅从 删除FROM子句之前列出的表。第二次 多表语法,仅匹配中列出的表中的行 删除FROM子句(在USING子句之前)。效果是 您可以同时从多个表中删除行,并且 仅用于搜索的其他表:

从t1内部联接t2内部联接t3中删除t1、t2
其中t1.id=t2.id,t2.id=t3.id

你可以用它来做

DELETE a, b, c, d 
FROM a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
第二种语法是使用:

DELETE FROM a, b, c, d 
USING a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
这也应该行得通

注意

要求:要删除的电子邮件必须在表a中至少有一行

请参阅语法文档:

对于第一个多表语法,仅从 删除FROM子句之前列出的表。第二次 多表语法,仅匹配中列出的表中的行 删除FROM子句(在USING子句之前)。效果是 您可以同时从多个表中删除行,并且 仅用于搜索的其他表:

从t1内部联接t2内部联接t3中删除t1、t2
其中t1.id=t2.id,t2.id=t3.id

你可以用它来做

DELETE a, b, c, d 
FROM a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
第二种语法是使用:

DELETE FROM a, b, c, d 
USING a 
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
这也应该行得通

注意

要求:要删除的电子邮件必须在表a中至少有一行

请参阅语法文档:

对于第一个多表语法,仅从 删除FROM子句之前列出的表。第二次 多表语法,仅匹配中列出的表中的行 删除FROM子句(在USING子句之前)。效果是 您可以同时从多个表中删除行,并且 仅用于搜索的其他表:

从t1内部联接t2内部联接t3中删除t1、t2
其中t1.id=t2.id,t2.id=t3.id

根据OP的要求:


“@Fred ii-谢谢,这很有效。我将单独的语句连接起来,而不是试图编写一个语句,然后使用mysqli_multi_查询。如果您想将此作为答案,我很乐意标记它!”

是的,使用

而不是
$query1、$query2
等。如手册所示连接它

使用
$query.=
进行所有查询,但不要在第一个查询中使用点。

根据OP的要求:


“@Fred ii-谢谢,这很有效。我将单独的语句连接起来,而不是试图编写一个语句,然后使用mysqli_multi_查询。如果您想将此作为答案,我很乐意标记它!”

是的,使用

而不是
$query1、$query2
等。如手册所示连接它

使用
$query.=
进行所有查询,但不要在第一个查询中使用点。

根据OP的要求:


“@Fred ii-谢谢你,这起作用了。我将单独的声明连接到rath