一条语句中包含多个MySQL查询


Multiple MySQL queries in one statement

我正试图将数据插入一个表中,选择ID,并在另一个与ID相关的表中插入其他信息,我的代码如下(我不是很高级,所以请耐心等待,我正在寻求解决这个问题,如果可能的话,我不会学到完全不同的东西),该代码可以工作到"insert into sb_admin_servers_groups",然后停止。

    $sql = 'INSERT INTO sb_admins (user, authid, password, gid, email, validate, extraflags, immunity, srv_group, srv_flags, srv_password, lastvisit)
    VALUES (:name, :ID, "#######", "-1", "", "", "0", "0", "X Permissions", "", "", "");
    SELECT aid FROM sb_admins WHERE authid = :ID
    INSERT INTO sb_admins_servers_groups (admin_id, group_id, srv_group_id, server_id)
    VALUES (aid, "5", "4", "-1")';
    $s=$pdo->prepare($sql);
    $s->bindvalue('name', $player->name);
    $s->bindvalue('ID', $player->uniqueid);
    $s->execute();
    }
    catch(PDOException $e)
    {
    echo "There was an error " . $e->getMessage() . "";
    exit();
    }

我认为SELECT aid FROM sb_admins WHERE authid = :ID行后面缺少分号(";")。它应该是SELECT aid FROM sb_admins WHERE authid = :ID;

第二次查询后缺少一个分号,但这不是唯一的问题。

您的SELECT将选择值,但不会存储它。当您到达第三个查询时,aid将没有值,因此您的查询将在某种程度上失败。

您可以将第二个和第三个查询组合起来,以避免存储临时结果的必要性。使用INSERT...SELECT

INSERT INTO sb_admins_servers_groups (admin_id, group_id, srv_group_id, server_id) 
    SELECT aid,  "5", "4", "-1" FROM sb_admins WHERE authid = :ID

MySQL参考:http://dev.mysql.com/doc/refman/5.5/en/insert-select.html

然而,我认为,除非您首先使用打开PDO模拟,否则您不会让多查询表单与准备好的语句一起工作

$s->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);

老实说,我认为您应该准备并执行两个单独的查询。