php
  • mysql
  • mysqli
  • sqlbindparameter
  • 2012-02-29 1 views 6 likes 
    6

    私はPHPでバインドparametrとMySQLiをPDOでこのMySQLのクエリを実行する必要があります。

    mysql_query("INSERT INTO `posts` (post_name,publish_date) VALUES ($post_name,NOW()) ") 
    

    私はこのようなスクリプトを使用するが、それは正しく公開日を挿入しません。

    $publish_date = 'NOW()'; 
    $insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
    $insert->bind_param("ss", $post_name $publish_date); 
    $insert->execute(); 
    

    それは、このようなpublish_date列にレコードを挿入します。0000-00-00 00:00:00

    私はこれをどのように行うことができますか?前もって感謝します。

    P.S:日付列の型がdatatimeです。

    答えて

    25

    はMySQLに値を供給する必要がないという点では、クエリのパラメータではありません。さらに

    $insert = $mysqli->prepare("INSERT INTO posts (post_name, publish_date) VALUES (?, NOW())"); 
    
    +2

    :あなたは '0000-00-00 00で終わるされている理由:00:00挿入はあなたということです認識可能なdatetime値ではなく文字列 ''NOW()' 'を挿入しようとしています。 MySQLは文字列をdatetime値に強制し、選択した値はゼロの日付になります。 – Hammerite

    +0

    しかし... bind_paramに "NOW()"を供給するためのbind_paramの変数は? –

    +0

    @Pedro、私はあなたの質問を理解していません。私が間違っている場合 – Hammerite

    2

    おそらくあなたは(ないNOW日付関数を使用してみてください)

    $publish_date =date("Y-m-d H:i:s"); 
    $insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
    $insert->bind_param("ss", $post_name $publish_date); 
    $insert->execute(); 
    
    +1

    このソリューションの問題は、データベースとphpが同じサーバー上で実行されない場合、クロックが同期していない可能性があることです。これは、NOW()(データベースサーバーからの時間がかかる)と日付(PHP/Webサーバーからの時間)が同じでないことを意味します。私はこの問題のためにいくつかの問題に遭遇しました。解決策は、ntpを使用して常に同期することです。 – theomega

    +0

    @theomegaは、データベースとphp/webserverがntp時間同期スクリプトを使用して別のサーバ上にあった場合、その問題を解決します – smilezjim

     関連する問題

    • 関連する問題はありません^_^