我做了很多研究并尝试了很多东西,但没有运气,所以我想我应该问一下。
两件事。我有以下代码来选择日期和时间。
<input type="date" name="conDate">
<input type="time" name="conTime">
接下来验证并将其转换为SQL存储。
$conDate = mysqli_real_escape_string($conn, isset($_POST['conDate'])) ? $_POST['conDate']: null;
$conTime = mysqli_real_escape_string($conn, isset($_POST['conTime'])) ? $_POST['conTime']: null;
$conDate = trim($conDate);
$conTime = trim($conTime);
$conDate = date('Y-m-d', strtotime(str_replace('/', '-', $conDate)));
$conTime = date("H:i", strtotime($conTime));
$sqlSum = "INSERT INTO software.concert(
concertTitle, concertDesc, concertLocation, concertDate, concertTime, concertHost, concertWallet, concertRevenue, concertAgeRes)
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($conn, $sqlSum);
mysqli_stmt_bind_param($stmt, "ssddddddd", $title, $desc, $location, $conDate, $conTime, $hostID, $wallet, $revenue, $ageR);
mysqli_stmt_execute($stmt) or die(mysqli_error($conn));
mysqli_stmt_close($stmt);
concertDate(和concertTime)是字段的正确名称,字段类型为DATE(和TIME(0)),我经常尝试调试,但出于某种奇怪的原因,SQL表始终如一虽然输入的值是2016-08-21(以及17:30的00:00:17),但是将稿件作为日期值获取。我已经尝试删除str_replace,甚至将表作为varchar(10)来输入日期,但即便这样也没有帮助我。
我该怎么做才能阻止EA和00:00:17被输入数据库,并确保正确的值或2016-08-21(yyyy-mm-dd)和17:30( HH:MM)
(只是旁注,所有其他值都输入到数据库,因此语句本身检出,而不是日期和时间。我得到一个AI id,我得到标题,desc,位置等全部,它只是日期和时间。)
答案 0 :(得分:1)
不要将日期/时间参数绑定为双精度但字符串为
...只需将它们全部绑定为字符串,让MySQL服务器的类型系统处理它。
if ( !mysqli_stmt_bind_param($stmt, "sssssssss", $title, $desc, $location, $conDate, $conTime, $hostID, $wallet, $revenue, $ageR) ) {
throw new mysqli_sql_exception('bind failed');
}