gpt4 book ai didi

php - 如何避免查询加倍插入数据库?

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:50 25 4
gpt4 key购买 nike

问题:
我制作了一个简单的表单,它使用 PHP 通过 INSERT 查询将信息传递到我的数据库。但是,每次我运行它时,它都会尝试将信息放入两次。我怎样才能避免这种情况?

解释:
我首先将答案插入到我的答案表中,将 AnswerID 保存为变量。然后使用我的问题表进行保存,最后我将包含 ID 的两个已保存变量用于我的问题_答案表中。

我的代码:

if (isset($_POST['textinput1']) && !empty($_POST['textinput1'])) {

$text1 = mysqli_real_escape_string($conn, $_POST['textinput1']);
$text2 = mysqli_real_escape_string($conn, $_POST['textinput2']);
$q_text = mysqli_real_escape_string($conn, $_POST['textarea']);

$stmt = $conn->prepare("INSERT INTO answers (Answer1Text, Answer2Text) VALUES (?, ?)");
$stmt->bind_param('ss', $text1, $text2);
$stmt->execute();
$answerid = $stmt->insert_id;
$stmt = $conn->prepare("INSERT INTO question (QuestionText) VALUES (?)");
$stmt->bind_param('s', $q_text);
$stmt->execute();
$questionid = $stmt->insert_id;
if ($stmt->execute()) {
$stmt = $conn->prepare("INSERT INTO question_answers (AnswerID, QuestionID) VALUES (?, ?)");
$stmt->bind_param('ss', $answerid, $questionid);
$stmt->execute();
echo "<h2>Dit spørgsmål er nu lagt op på siden!</h2>";
echo "<h3>Tusinde tak for din interesse for SMIL - Skodfri Århus.</h3>";
}
else
{
echo "ERROR: Could not able to execute . " . mysqli_error($conn);
}
}

// close connection
mysqli_close($conn);
?>

我的重要表:
问题:QuestionID(PK),QuestionText
答案:AnswerID(PK)、Answer1Text、Answer2Text
question_answers:QuestionAnswerID(PK)、QuestionID(FK)、AnswerID(FK)

附言。我不喜欢使用复合唯一约束作为解决方案。

还有一个附带问题,$stmt->insert_id 变量应该是 mysqli_real_escape_string 吗?

最佳答案

你的问题是你已经执行了两次查询

if (isset($_POST['textinput1']) && !empty($_POST['textinput1'])) {

$text1 = mysqli_real_escape_string($conn, $_POST['textinput1']);
$text2 = mysqli_real_escape_string($conn, $_POST['textinput2']);
$q_text = mysqli_real_escape_string($conn, $_POST['textarea']);

$stmt = $conn->prepare("INSERT INTO answers (Answer1Text, Answer2Text) VALUES (?, ?)");
$stmt->bind_param('ss', $text1, $text2);
$stmt->execute();
$answerid = $stmt->insert_id;
$stmt = $conn->prepare("INSERT INTO question (QuestionText) VALUES (?)");
$stmt->bind_param('s', $q_text);
$stmt->execute();
$questionid = $stmt->insert_id;

// THIS IS THE SECOND EXECUTION OF QUERY 2
if ($stmt->execute()) {
$stmt = $conn->prepare("INSERT INTO question_answers (AnswerID, QuestionID) VALUES (?, ?)");
$stmt->bind_param('ss', $answerid, $questionid);
$stmt->execute();
echo "<h2>Dit spørgsmål er nu lagt op på siden!</h2>";
echo "<h3>Tusinde tak for din interesse for SMIL - Skodfri Århus.</h3>";
}
else
{
echo "ERROR: Could not able to execute . " . mysqli_error($conn);
}
}

// close connection
mysqli_close($conn);
?>

改为尝试将此作为 IF 测试

    //if ($stmt->execute()) {
if ( isset($answerid,$questionid) ) {

关于php - 如何避免查询加倍插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34254951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com