【发布时间】:2020-09-05 17:50:20
【问题描述】:
我有以下代码将数据从表单发送到 SQL 数据库:
<?php
session_start();
ob_start();
include 'includes/db_connection.php';
if(empty($_POST)){
header("Location: index.php");
}
else{
try {
$dbconn = OpenCon();
$fname = $_POST['fnameInput'];
$sname = $_POST['snameInput'];
$sex = $_POST['sexInput'];
$dob = $_POST['dobInput'];
$schoolID = $_SESSION['school'];
$sqlstmnt2 = 'INSERT INTO students (`firstName`, `surname`, `dob`, `gender`, `schoolID`) VALUES (:firstName, :surname, :dob, :gender, :schoolID)';
$stmtUsr2 = $dbconn -> prepare($sqlstmnt2);
$stmtUsr2 -> bindValue(':firstName', $fname);
$stmtUsr2 -> bindValue(':surname', $sname);
$stmtUsr2 -> bindValue(':dob', $dob);
$stmtUsr2 -> bindValue(':gender', $sex);
$stmtUsr2 -> bindValue(':schoolID', $schoolID);
$stmtUsr2 -> execute();
// redirect to pupil's profile
header("Location: pupilprofile.php");
die();
}
catch (PDOException $e) {
echo "DataBase Error: The user could not be added.<br>".$e->getMessage();
}
catch (Exception $e) {
echo "General Error: The user could not be added.<br>".$e->getMessage();
}
}
?>
我的数据库表的结构是 studentID 作为主键自动递增,除了 dob 之外的所有字段都是文本(dob 设置为日期时间)
发送数据的表单如下所示:
<form action="registersubmit.php" method="post">
First Name: <input type="text" autocomplete="off" name="fnameInput"><div id="erfirstname"></div><br>
Surname: <input type="text" autocomplete="off" name="snameInput"><div id="ersurname"></div><br>
Sex: <select id="sexInput" name="sexInput">
<option value="male">Male</option>
<option value="female">Female</option>
</select><div id="ersex"></div><br>
DOB: <input type="text" id="datepicker" name="dobInput"><div id="erdob"></p>
<input type="submit" name="pupilRegSubmit" value="Register" onclick="if(validatePupilReg()) this.form.submit()">
</form>
我没有收到 PDO 错误,但数据没有插入到表中。我在想这可能与日期选择器与 SQL 中的数据类型不匹配有关,但我不确定。有什么想法吗?
【问题讨论】:
-
您是否尝试过不使用
ob_start()来查看是否有任何输出。 -
在
execute()之后尝试print_r($stmtUsr2->errorInfo());找出插入错误 -
如果您的数据库表有 studentID 作为自动增量,并且您尝试使用提供的值进行插入,那么您很可能会收到有关表中已存在值的错误。在使用自动增量对表进行插入时,最好不要在插入语句中传递该列......让它完成它的工作。确保您的 PDO 也配置为抛出异常
$your_pdoobject->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -
OK 我有以下错误消息,我猜这是 Datepicker 的数据类型和 SQL 字段的数据类型之间的问题。 thisArray ( [0] => 22007 [1] => 1292 [2] => 不正确的日期时间值:第 1 行的列 'dob' 的日期时间值是 '08/10/2020')