0

日付フィールドで奇妙な結果が得られる PHP/MySQL スクリプトがあります。プロセス全体を通して、私の日付は最後まで問題ありません。最終結果では、日付フィールドのすべてのエントリが「0000-00-00」になります。私は完全に立ち往生していて、他に何をすべきかわかりません。これは、PHP がこれを日付として解釈しないという問題であることがわかりますが、修正方法がわかりません。これが私のコードです:

$sql = "CREATE TABLE temp_workouts (my_date date, sg_id int(11), loc_id int(11))";
$result = mysql_query($sql);
if (!$result) {
    $tag_success = "failure";
    $tag_message = mysql_error();
    echo encodeJSON($tag_success, $tag_message);
    die();
}

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $my_date = $row['my_date'];
    echo $my_date . " ";   //<--this output looks perfect
    $sql = "INSERT INTO temp_table (my_date) VALUES ($my_date)";
    $result2 = mysql_query($sql);
}
die();  

MyPHPAdmin に戻ってテーブルを見ると、my_date 列全体に「0000-00-00」が含まれています。これを「Ymd」形式の日付としてPHPに認識させるにはどうすればよいですか? ありがとう。助けていただければ幸いです。

4

3 に答える 3

2

問題は、文字列リテラルを一重引用符で囲んでいないことだと思います。

 INSERT INTO temp_table (my_date) VALUES ('$my_date')
                                          ^---     ^--- string literals in single quotes

それ以外の場合、ステートメントはおそらく次のようになります。

 ... VALUES (2013-08-22)

MySQL はそれを有効な日付に変換せず、警告メッセージを発行し、「ゼロ」の日付を挿入します。

于 2013-08-23T03:05:14.833 に答える
1

当面の問題は、挿入ステートメントで日付値を引用符で囲んでいないことです。

変化する

$sql = "INSERT INTO temp_table (my_date) VALUES ($my_date)";

$sql = "INSERT INTO temp_table (my_date) VALUES ('$my_date')";
                                                 ^        ^

これで、INSERT ... SELECT構文を使用して目標を一度に達成できます

INSERT INTO temp_table (my_date)
SELECT my_date
  FROM my_table

したがって、コードのこの部分

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $my_date = $row['my_date'];
    echo $my_date . " ";   //<--this output looks perfect
    $sql = "INSERT INTO temp_table (my_date) VALUES ($my_date)";
    $result2 = mysql_query($sql);
}

に変更できます

$sql = "INSERT INTO temp_table (my_date)
        SELECT my_date FROM my_table";
$result2 = mysql_query($sql);

補足: PDOまたはMySQLiに切り替えて、準備済みステートメントを使用すること を検討してください。

于 2013-08-23T03:05:08.700 に答える