一个语句中有多个MySQL查询

时间:2015-02-17 19:17:32

标签: php mysql

我试图将数据插入一个表格并选择ID并在另一个与ID相关的表格中插入其他信息,我的代码如下(我不是非常先进,所以请耐心等待,我和#39;我希望解决这个问题,如果可能的话,不要学习完全不同的东西),这段代码可以实现" INSERT INTO sb_admins_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();
    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您在第二次查询后错过了分号,但这不是您唯一的问题。

您的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);

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