【问题标题】:SQL syntax error with DELETE query带有 DELETE 查询的 SQL 语法错误
【发布时间】:2017-07-20 09:56:13
【问题描述】:

我正在开发一个连接到由 MySQL 管理的数据库的网站。这些是表 pagamentiprenotazione 的结构:

帕加门蒂

Prenotazione

在我的 PHP 代码中,我想使用字段 IDPrenotazione 从两个表中删除一条记录。我可以使用两个不同的查询,如下面的代码

$query1 = "DELETE FROM pagamenti WHERE IDPrenotazione='$ID'";
$query2 = "DELETE FROM prenotazione WHERE IDPrenotazione='$ID'";

但如果我只使用一个查询会更好。我了解到在 SQL 语言中查询是由; 分隔的,所以我尝试了这段代码

$query = "DELETE FROM pagamenti WHERE IDPrenotazione='$ID';
          DELETE FROM prenotazione WHERE IDPrenotazione='$ID'";

但它返回此错误

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELETE FROM prenotazione WHERE IDPrenotazione='2017-0006'' at line 1

这是完整的代码,带有执行

$query = "DELETE FROM pagamenti WHERE IDPrenotazione='$ID';
          DELETE FROM prenotazione WHERE IDPrenotazione='$ID'";
if (mysqli_query($connessione, $query))
{
    //code
}
else
{
    echo mysqli_error($connessione);
}

如果我在 phpMyAdmin 上执行此代码,它会按我的意愿运行,没有错误,因此查询必须是正确的。

为什么它不能通过 PHP 工作?我怎样才能让它发挥作用?

【问题讨论】:

  • 显示你的查询执行部分的 php 代码
  • 它可以工作,但我个人会坚持这两个陈述。它更清晰,也更不容易出现其他错误。
  • 你不能这样运行它:$query = "DELETE FROM pagamenti, prenotazione WHERE IDPrenotazione='$ID'"; ?
  • 对于多个查询,请尝试multi_query
  • 默认的mysqli_query php函数不支持多查询,我想是出于安全原因。 use mysqli_multi_query 如果你真的需要这样做。

标签: php mysql sql


【解决方案1】:

使用mysqli_multi_query()

mysqli_multi_query() 函数执行一个或多个查询 数据库。查询用分号分隔。

$query = "DELETE FROM pagamenti WHERE IDPrenotazione='$ID';DELETE FROM prenotazione WHERE IDPrenotazione='$ID'";

mysqli_multi_query($connessione, $query);

【讨论】:

    【解决方案2】:

    试试这个

    $query = "DELETE FROM pagamenti WHERE IDPrenotazione='$ID';DELETE FROM prenotazione WHERE IDPrenotazione='$ID'";
    
    mysqli_multi_query($connessione, $query);
    

    【讨论】:

      【解决方案3】:

      您可以通过一个查询从两个表中删除数据,但两个表之间必须存在关系。

      试试这样:

       "DELETE `pagamenti`,`prenotazione ` from `pagamenti` LEFT JOIN `prenotazione ` on
       `pagamenti`.`id` = `prenotazione `.`pagementi_id` where `pagamenti`.`IDPrenotazione` = '". $ID."' 
        and `prenotazione`.`IDPrenotazione` = '" . $ID."'";
      

      这里pagamenti.id = prenotazione.pagementi_id是你需要放在这里的关系。

      它对我有用。

      【讨论】:

      • 感谢您的回答,但我已经使用mysqli_multi_query解决了这个问题
      • 好吧,这很好,但是如果你想在一个查询中删除两个表数据,那么你可以试试这个。很酷。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多