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();

スクリプトを実行すると、ログに次のエラーが表示されます

私のデータベース:

+-------+--------------+
| 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 に答える