SQL - 如何同时将相同的值插入到两个表中

时间:2015-04-11 19:44:09

标签: mysql sql phpmyadmin

修改 这个答案已经解决了,正确的代码就在问题的最底层。我希望对于遇到同样问题的人来到这个页面是有用的:) ~~

我正在尝试将一些数据插入到我的数据库中的两个表中。我尝试过使用这里的方法: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);

1 个答案:

答案 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;       

修复插入语句以适应表格。

但是我发现使用两个单独的查询没有问题,就像你已经建议的那样。