【问题标题】:Perform multiple SQL queries with PHP [closed]使用 PHP 执行多个 SQL 查询 [关闭]
【发布时间】:2014-08-09 15:37:51
【问题描述】:

我有一个 Web 表单,应该将数据存储到数据库中的两个不同表中。在我的包含中,我有一个执行必要查询的 php 文件。 Web 表单应该存储两条信息:从表单提交到 users 表的 xp 值,以及在 completed_quests 表中的文章 id。单独地,查询完全按照它们应该的方式工作。但是,如果我尝试同时执行两个查询,则只执行第一个查询而忽略第二个查询。如何使两个查询在用户点击提交按钮后运行?

(编辑)我已经更新了代码。为了澄清,我的 php 文件中还有其他代码定义了这些查询中使用的变量。这些只是我试图运行的两个查询,我需要知道如何运行这两个查询,因为它似乎忽略了第二个查询(更新)。它现在正在工作,但是我遇到了 INSERT 查询创建重复条目的问题。

(编辑)我再次更新了代码。我使用了 ON DUPLICATE KEY UPDATE 来避免表中的重复条目。我确保用户 ID 是表中的主键,并且它现在可以正常运行。

mysql_select_db("questroot_joomla", $con);

mysql_query("INSERT INTO arp2i_completed_quests (user_id, content_id) Values ($userId, $currentArticle)
            ON DUPLICATE KEY UPDATE content_id=$currentArticle");

mysql_query( "UPDATE arp2i_users"
. " SET userxp= $userXp"
. " WHERE id = $userId");

mysql_close($con);

【问题讨论】:

  • 这真的是你的全部代码吗?我很惊讶它会更新任何数据库上的任何内容.....您所做的就是将一个字符串分配给一个变量,然后创建另一个字符串并无处分配它,因此它被丢弃了
  • MySQL。 SQL 服务器。选择一个。
  • 请阅读 Joomla 文档,了解如何为 Joomla 编写数据库查询。您还应该使用 $_POST

标签: php mysql sql sql-server joomla


【解决方案1】:
$sql = "INSERT INTO `arp2i_completed_quests` (`user_id`, `content_id`) Values ('$_POST[current_user]', '$_POST[current_article]')";

/* it's not in $sql ->> */   "UPDATE `arp2i_users`
    SET `userxp`= '$_POST[xpValue]'
    WHERE `id` = '$_POST[current_user]'";

试试这个:

$sql = "INSERT INTO `arp2i_completed_quests` (`user_id`, `content_id`) Values
   ('$_POST[current_user]', '$_POST[current_article]');
   UPDATE `arp2i_users`
   SET `userxp`= '$_POST[xpValue]'
   WHERE `id` = '$_POST[current_user]'";

【讨论】:

    【解决方案2】:

    您可以根据需要简单地添加许多 mysqli_* 查询:

    mysqli_query($link, "INSERT INTO `arp2i_completed_quests` (`user_id`, `content_id`) Values ('".$_POST['current_user']."', '".$_POST['current_article']."')";
    
    mysqli_query($link, "UPDATE `arp2i_users` SET `userxp`= '".$_POST['xpValue']."' WHERE `id` = '".$_POST['current_user']."'");
    

    【讨论】:

    • 这是 Joomla,不是原始 PHP
    • 我们无法用这么少的信息猜测。甚至,函数只需转换为 Joomla 数据库系统。
    【解决方案3】:

    这里的很多人只是在回答,就好像您使用的是 PHP 而不是一个已经设计为为您处理所有这些事情并安全地执行它的框架,包括检查注入等。您使用一个框架来制作它更简单,避免做不安全的事情。 JForm、JDatabaseQuery 和 API 的其他部分的组合将很好地处理更新多个表,您可以在整个核心中看到这一点。您将如何做取决于您正在做什么,例如在保存用户数据时更像是更新配置文件表,还是更像是在保存内容时更新资产表或创建新标签。不过,您应该做的是停止与 API 抗争,并开始利用它为您带来优势。

    【讨论】:

      最近更新 更多