我试图将数据插入一个表格并选择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();
}
答案 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);
老实说,我认为你应该准备并执行两个单独的查询。