下面我想在数据库中插入值。我想在选定的课程(考试)中插入每个学生。
现在我们可以说选择的会话是34
,我的问题是让一个选择框包含多个学生,他们将接受以下评估:
<select name='addtextarea' id='studentadd' multiple='multiple' size='10'>
<option value='1'>Joe Blogs</option>
<option value='4'>Bill Kite</option>
<option value='6'>Mary Scott</option>
</select>
我的问题是我如何遍历每个学生,以便它为数据库中的每个学生插入详细信息,以便在插入时db表如下所示:
SessionId StudentId
34 1
34 4
34 6
下面是使用mysqli / php的插入代码:
$studentid = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : '';
$sessionid = (isset($_POST['Idcurrent'])) ? $_POST['Idcurrent'] : '';
$insertsql = "
INSERT INTO Student_Session
(SessionId, StudentId)
VALUES
(?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}
$insert->bind_param("ii", $sessionid, $studentid);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
答案 0 :(得分:1)
只需循环bind_param()
和execute()
,您只需要做一次准备:
为了防止插入零,我还将整个准备好的语句包装成:
if(isset($_POST['addtextarea']) && is_array($_POST['addtextarea']) && count($_POST['addtextarea']) > 0 && isset($_POST['Idcurrent']))
{
// we have some data to insert, do the prepared stmt
$insertsql = "
INSERT INTO Student_Session
(SessionId, StudentId)
VALUES
(?, ?)
";
if ($insert = $mysqli->prepare($insertsql)) {
foreach($_POST['addtextarea'] as $studentid)
{
$insert->bind_param("ii", $_POST['Idcurrent'], $studentid);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
}
$insert->close();
}
else
{
// prepare() call failed - syntax error in query or error with the db
// Handle errors with prepare operation here
}
}
else
{
// post data is missing, show message
}