我正在开展一个项目,但我被困住了。我正在建立一个系统来改变网站上常见问题解答页面的答案和问题。为此,我在SQL中使用了2个表。一个包含答案的答案和一个包含问题的答案,该问题包含一个列,表示答案所连接的ID号。我不能一次运行那两个SQL,有人可以帮我解决问题。我需要先更新我的答案表,从新答案中获取ID,将其连接到问题表。
提前致谢。
更新代码
<?php
include('../inc/connection.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['fields'])) {
foreach ($_POST['fields'] as $item) {
$values[] = $db->real_escape_string($item);
}
var_dump($values);
if ($stmt = $db->prepare("INSERT INTO AntwoordenFAQ (nl_antwoord,fr_antwoord,en_antwoord) VALUES (?,?,?);")) {
$stmt->bind_param('sss', $values[0], $values[1], $values[2]);
if ($stmt->execute()) {
if ($stmt->affected_rows == 1) {
$IDinsert = $db->insert_id;
if ($stmt = $db->prepare("INSERT INTO VragenFAQ (nl_vraag, fr_vraag, en_vraag) VALUES (?,?,?);")) {
$stmt->bind_param('sss', $values[3], $values[4], $values[5]);
if ($stmt->execute()) {
if ($stmt->affected_rows == 1) {
echo TRUE;
}
else {
echo $IDinsert;
}
}
$stmt->close();
}
}
else {
echo FALSE;
}
}
$stmt->close();
}
$db->close();
}
}
exit();
?>
答案 0 :(得分:1)
说你不能同时做两个陈述似乎很明显,但事实并非如此。 SQL确实提供了一种逻辑上一次执行两个语句的方法。它意味着针对数据库的任何其他查询都不会看到任何查询或两个查询的结果。您通过事务执行此操作。它的工作原理如下:
BEGIN TRANSACTION;
-- On systems you might need to lock tables here on others it
-- happens automatically
-- QUERY 1
INSERT -- ...
;
-- QUERY 2
INSERT -- ...
;
COMMIT TRANSACTION;
这是(例如)银行如何将现金从一个账户转移到另一个账户 - 从来没有一个账户有现金或没有账户有现金。在银行示例中,两个(或更多)查询将是UPDATE
个查询。