【发布时间】:2015-12-13 18:52:35
【问题描述】:
问题:
我制作了一个简单的表单,它使用 PHP 通过 INSERT 查询将信息传递到我的数据库。但是,每次我运行它时,它都会尝试将信息输入两次。我怎样才能避免这种情况?
说明:
我首先将答案插入到我的答案表中,将 AnswerID 保存为变量。然后使用我的问题表进行保存,最后我使用包含 ID 的两个已保存变量到我的 question_answers 表中。
我的代码:
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吗?
【问题讨论】:
-
是否所有的表都插入了两次数据?
-
您运行
$stmt->execute()两次。使用准备好的语句,您无需转义。 -
感谢您的回答,确实是这个问题。啊,这是否意味着这段代码对 SQL 注入是安全的?