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

SQL - How to Insert same value into two tables simultaneously

编辑 这个答案已经解决了,正确的代码在问题的底部。我希望它对遇到同样问题的人有用:) ~~

我正在尝试将一些数据同时插入到我数据库中的两个表中。我试过使用这里的方法:SQL Server: Is it possible to insert into two tables at the same time? 但我认为我没有正确实施它。

表名为“player”和“balance”。 “玩家”包含这些行:facebook_id, first_name, last_name. “余额”包含这些行: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 文件的末尾进行了以下检查, 以将回显发送回调用 PHP 文件的 AJAX 函数 (然后我启动一个弹出窗口取决于关于它是 "successful" 还是 "failed" 响应)。我想知道这是否会对插入操作产生负面影响?

//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 我想我应该提到我用来测试这个的东西: 我在本地主机上使用 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);

你是对的。对于这种情况,发明了交易。试试这个:

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;       

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

但我认为使用两个单独的查询没有问题,就像您已经被建议的那样。