【问题标题】:Inserting data into multiple tables not functioning correctly将数据插入多个表无法正常工作
【发布时间】:2015-08-07 01:06:44
【问题描述】:

我有以下两张表

桌面播放器:

player_id (int)(primary)
player_name (varchar)
player_report_count (int)

表格报告:

report_id (int)(primary)
player_id
report_description
report_location

首先我向用户询问 player_name 并将其插入到玩家数据库中。从这里给玩家一个id。

然后我尝试获取玩家报告计数的值并将当前值加一(这不起作用)。

这之后是从播放器表中抓取playerId,然后从报告表中插入到对应的列中(同样不行)。

当我在数据库中插入一些值时,名称、描述和报告被添加到数据库中,但是所有条目的 playerID 保持为 0,而 player_report_count 保持一致的 0。

使这两个功能发挥作用的正确方法是什么?还有没有更有效的方法来做到这一点?

<?php
$records = array();

if(!empty($_POST)){
if(isset($_POST['player_name'],
    $_POST['report_description'],
    $_POST['report_location'])){

    $player_name = trim($_POST['player_name']);
    $report_description = trim($_POST['report_description']);
    $report_location = trim($_POST['report_location']);

    if(!empty($player_name) && !empty($report_description) && !empty($report_location)){
        $insertPlayer = $db->prepare("

        INSERT INTO player (player_name)
        VALUES (?)

        ");

        $insertPlayer->bind_param('s', $player_name);


        $reportCount = $db->query("
            UPDATE player
            SET player_report_count = player_report_count + 1
            WHERE
            player_name = $player_name

        ");

        $getPlayerId = $db->query("
        SELECT player_id
        FROM player
        WHERE player_name = $player_name
        ");

        $insertReport = $db->prepare("

        INSERT INTO report (player_id, report_description, report_location)
        VALUES (?, ?, ?)

        ");
        $insertReport->bind_param('iss', $getPlayerId, $report_description, $report_location);

        if($insertPlayer->execute()
        && $insertReport->execute()
        ){
            header('Location: insert.php');
            die();
        }


    }


}

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这里的主要问题是您在插入之前获取播放器详细信息。 $getPlayerId 将始终返回空结果。

    请按照以下顺序进行。

    1. 将播放器详细信息插入播放器表并使用 mysql_insert_id 获取 payerid。绑定后,您需要执行向表中插入详细信息。

    2. 然后绑定并执行插入报表。

    3. 然后通过使用您在步骤 1 中获得的 playerid 增加报告计数来更新玩家表。

    注意:插入多个表时使用事务。如果任何插入失败,这将帮助您回滚。

    MySQL 查询将返回结果对象。从这里参考https://stackoverflow.com/a/13791544/3045153

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      如果您需要获取最后插入的播放器的 ID,This is the function you need 如果您正在使用 PDO 或者如果它是自定义 Mysql 类,则需要 mysql_insert_id()(或 mysqli_insert_id())的返回值,然后直接在下一个INSERT INTO语句中使用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 2017-12-10
        • 2017-08-26
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        • 2013-09-30
        相关资源
        最近更新 更多