【问题标题】:How can I update two tables in one query?如何在一个查询中更新两个表?
【发布时间】:2013-01-15 21:25:31
【问题描述】:

有什么方法可以在一个查询中更新两个表?下面是我的代码示例。如何将这两个更新查询合二为一?提前谢谢!

   <?php
// DATABASE UPDATE
   if (isset($_POST['submit']) or isset($_GET['submit'])){

// 1st QUERY
   $db =& JFactory::getDBO();
   $query_1 = "UPDATE table_1
                  SET name     = '".$_POST["name"]."',
                      surename = '".$_POST["surename"]."'
               WHERE id=1";
   $db->setQuery($query_1);
   $db->query();

// 2nd QUERY
   $db =& JFactory::getDBO();
   $query_2 = "UPDATE table_2
                  SET team_id   = '".$_POST["team_id"]."',
                  SET team_name = '".$_POST["team_name"]."'
                  ";
   $db->setQuery($query_2);
   $db->query(); } ?>

【问题讨论】:

  • 说真的,请停止无论你在做什么,并阅读proper SQL escaping。你在这里所做的事情是危险的,对职业有害。
  • 第二个查询中的 WHERE 条件在哪里。现在编写的将更新该表中的所有记录。
  • 这不是学术问题。看看automatic hacking tools 可以对您的网站做些什么。请认真对待。如果您在公共互联网上有此内容,那么您的整个网站被销毁只是时间问题。我并没有声称自己什么都知道,但我确实对不正确转义数据的风险了解得足够多。
  • @tadman:好的,我明白了……您能否解释一下这部分代码的问题到底是什么,这只是一个示例?
  • 好的,我知道了,我会阅读你给我的所有链接,我通常会在谷歌上搜索它。非常感谢!!!

标签: php mysql sql database joomla1.5


【解决方案1】:

MySQL 确实允许在单个查询中更新多个表(尽管您的应用程序一次执行一个通常是有意义的)。

UPDATE table_1, table_2
SET table_1.field = <some value>, table_2.field = <some value>
WHERE table_1.field2 = table_2.field_2 
AND table_1.field_3 = <some other value>

见:http://dev.mysql.com/doc/refman/5.1/en/update.html

正如其他人所说,您应该考虑使用准备好的语句。

【讨论】:

  • 我对这个东西真的很陌生,对不起!!!这些准备好的陈述究竟是什么?谢谢你的回答!!!
  • 我不确定您使用的是什么库,但对于 PDO,PHP 文档非常好:php.net/manual/en/pdo.prepare.php。基本上,它们有助于防止在您的数据库应用程序中执行恶意查询。
【解决方案2】:

使用事务,只有 InnoDB 引擎支持。

mysql> 开始事务; 查询正常,0 行受影响(0.00 秒)

{首先在此处插入}

{第二次插入这里}

mysql> 提交; 查询正常,0 行受影响(0.00 秒)

请注意,您必须编写提交,因为如果您不这样做,它不会将其刷新到数据库中。

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2015-05-09
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多