可能重复:
Convert MMDDYYYY to date for PHP
PHP mysql insert date format
我使用PDO
在我的数据库中插入数据,但是表单中有date
,这是代码的一部分:
$name = "John Doe"; // from form
$bdate = 05/13/1989; // from form
$query = "INSERT INTO details (name, bdate) VALUES (:name, :bdate)";
$stmt = $this->handle->prepare($query);
$stmt->bindParam(':name',$name,PDO::PARAM_STR);
$stmt->bindParam(':bdate',$bdate,PDO::PARAM_STR);
$stmt->execute();
运行脚本后,我在日志中遇到此错误: “SQLSTATE [22007]:日期时间格式无效:1292日期值不正确:'05/13/1989'列'bdate'at at第1行“ 。
我的数据库:
+-------+--------------+
| name | varchar(100) |
+-------+--------------+
| bdate | date |
+-------+--------------+
答案 0 :(得分:3)
MySQL通常需要YYYY-MM-DD
格式的日期。最好将你的削减日期转换为。
这不是转义斜杠的问题,因为首先不会转义斜杠。只有可能破坏你的字符串转义的东西才会被改变。显然MYSQL正在获取正确的字符串,但由于格式化问题而拒绝它。
答案 1 :(得分:1)
要在数据库中输入日期,需要YYYY-MM-DD,或者在1989-05-13。只需创建一个以正确顺序交换日期的函数。
function swap_date($date) {
$newDate = explode("/", $date);
return "{$newDate[2]}-{$newDate[0]}-{$newDate[1]}";
}
// -------------
$name = "John Doe";
$bdate = swap_date("05/13/1989"); // swap_date($_GET['date']) or whatever you use
$query = "INSERT INTO details (name, bdate) VALUES (:name, :bdate)";
$stmt = $this->handle->prepare($query);
$stmt->bindParam(':name',$name,PDO::PARAM_STR);
$stmt->bindParam(':bdate',$bdate,PDO::PARAM_STR);
$stmt->execute();
答案 2 :(得分:0)
在向数据库插入任何内容之前,最好确保它包含“,/,”之类的字符等等。因此,更好的做法是创建一个添加或条带斜杠的函数,并返回一个无风险的字符串以插入到数据库中。 所以你能做的就是,
$bdate = 05/13/1989;
$bdate = mysql_prep($bdate);
function mysql_prep($value) {
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists("mysql_real_escape_string"); // PHP >= v4.3.0
if ($new_enough_php) {
if ($magic_quotes_active) {
$value = stripslashes($value);
}
$value = mysql_real_escape_string($value);
} else { // before PHP v4.3.0
if (!$magic_quotes_active) {
$value = addslashes($value);
}
}
return $value;
}