修改 这个答案已经解决了,正确的代码就在问题的最底层。我希望对于遇到同样问题的人来到这个页面是有用的:) ~~
我正在尝试将一些数据插入到我的数据库中的两个表中。我尝试过使用这里的方法:SQL Server: Is it possible to insert into two tables at the same time?但我认为我没有正确实现它。
这些表名为“player”和“balance”。
“播放器”包含以下行:facebook_id, first_name, last_name.
“balance”包含以下行:facebook_id, gold_balance.
“facebook_id”的相同值应插入两个表格中 我想也许这个Insert语句会起作用,但它不是:
$sql="INSERT INTO player, balance
(facebook_id, first_name, last_name, gold_balance)
VALUES
('$userid', '$userfirst_name', '$userlast_name', “100”)";
我从未使用过“交易”方法,并且想知道这是否适合使用?如果是这样,实现它的正确语法是什么? 提前感谢您对此的任何帮助!
更新 在阅读@ Barada的评论之后,这就是我目前正在尝试的内容:
$sql=START TRANSACTION;
"INSERT INTO player
(facebook_id, first_name, last_name) VALUES
('$userid', '$userfirst_name', '$userlast_name')"
"INSERT INTO balance
(facebook_id, gold_balance)
VALUES
('$userid', "100")"
commit;
$ userid,$ userfirst_name,$ userlast_name的值是正确的(如果我只使用一个Insert语句,它们输入正确,所以问题可能在于Transaction语句的语法。
这个Insert语句包含在一个PHP文件中,该文件在onClick事件期间使用AJAX调用(我不确定这是否会影响所需的Insert语法,但我想我应该提一下),还有,我有以下检查在PHP文件的末尾,将echo发送回调用PHP文件的AJAX函数(然后根据它是“成功”还是“失败”响应启动弹出窗口)。我想知道这是否会对插入操作产生负面影响?
//If the SQL insert statement completed correctly:
$result = mysqli_query($conn, $sql);
if ($result) {
$verify=1;
}
else{
$verify=0;
}
echo $verify;
mysqli_close($conn);
更新2 我想我应该提一下我用来测试它的东西: 我在localhost上使用WAMP,我的PHP版本是5.6.5,mySQL版本是5.6.12
以下SQL在我直接输入phpMyAdmin的SQL控制台时起作用:
START TRANSACTION;
INSERT INTO player (facebook_id, first_name, last_name) VALUES ('test_id', 'test_firstname', 'test_lastname');
INSERT INTO balance (facebook_id, gold_balance) VALUES ('test_id', '100');
COMMIT;
它完美地更新了表格。但是,当我尝试在我的.php脚本中使用以下内容时,它无法输入任何内容:
//After database connection has taken place…
$sql=START TRANSACTION;
INSERT INTO player (facebook_id, first_name, last_name) VALUES ('test_id', 'test_firstname', 'test_lastname');
INSERT INTO balance (facebook_id, gold_balance) VALUES ('test_id', '100');
COMMIT;
//If the SQL insert statement completed correctly...
$result = mysqli_query($conn, $sql);
if ($result) {
$verify=1;
}
else{
$verify=0;
}
echo $verify;
mysqli_close($conn);
由于SQL直接输入到phpMyAdmin的SQL控制台时效果很好,这是否意味着我的PHP代码中的问题是错误的?我将$sql=
放在Transaction语句之前,因为我需要在关闭数据库连接之前检查$sql
是否已正确完成。但这可能是它不起作用的原因吗?我已经尝试省略它,并尝试添加和删除()
“”
;
标记,希望只有一件小事丢失,但到目前为止还没有任何效果。可以使用mysqli_query
成为它不起作用的原因吗?任何帮助将不胜感激!
以下代码有效! :)
$sql = "INSERT INTO player (facebook_id, first_name, last_name) VALUES
('$userid', '$userfirst_name', '$userlast_name');";
$sql .= "INSERT INTO balance (facebook_id, gold_balance)
VALUES ('$userid', '100');";
$result = mysqli_multi_query($conn, $sql);
if ($result) {
$verify=1;
}
else{
$verify=0;
}
echo $verify;
mysqli_close($conn);
答案 0 :(得分:2)
你是对的。在这种情况下,发明了交易。试试这个:
START TRANSACTION;
INSERT INTO player
(facebook_id, first_name, last_name, gold_balance)
VALUES
('$userid', '$userfirst_name', '$userlast_name', “100”)
INSERT INTO BALANCE
(facebook_id, first_name, last_name, gold_balance)
VALUES
('$userid', '$userfirst_name', '$userlast_name', “100”)"
commit;
修复插入语句以适应表格。
但是我发现使用两个单独的查询没有问题,就像你已经建议的那样。