1

可能重复:
将 MMDDYYYY 转换为 PHP
PHP mysql 插入日期格式的日期

我用来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]: Invalid datetime format: 1292 Incorrect date value: '05/13/1989' for column 'bdate' at row 1"

我的数据库:

+-------+--------------+
| name  | varchar(100) |
+-------+--------------+
| bdate |    date      |
+-------+--------------+
4

3 回答 3

3

MySQL 通常需要YYYY-MM-DD格式中的日期。最好将您的削减日期转换为该日期。

这不是转义斜杠的问题,因为斜杠一开始就没有转义。只有那些可能破坏你的字符串转义的东西才会被改变。显然 MYSQL 正在获取正确的字符串,但由于格式问题而拒绝它。

于 2012-11-16T05:02:03.910 回答
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();
于 2012-11-16T08:20:45.330 回答
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;
}
于 2012-11-16T07:51:54.557 回答