2017-05-21 5 views
1

私はこの形式の日付/時刻型の列を持っています:YYYY-MM-DD HH:mm:ss。日時の最後の8文字を更新します(....- ..-hh:mm:ss)

このデータを更新する私のPHPフォームでは、DATEpart用とTIMEpart用の2つの別々のフィールドを作成しました。

受信/使用して、テーブルからの私のPHPのフォームにこれらの値をロードするためには問題ありません:

RIGHT(datetime,8) for TIMEpart or for DATEpart LEFT(datetime,10) 

問題は、私はまた、データのその部分だけを更新することはできませんしています。 TIMEpartで更新しようとすると、最後の8文字を更新するのではなく、datetimeの最初の8文字を更新しようとします。問題は、プログラムにそうするように指示する方法がわからない、私はそれが私のSQLクエリに定義する必要があることを知っている。

$query3=mysqli_query($db,"update LISTS set datetime=LEFT(datetime,10), 
datetime=RIGHT(datetime,8) where id='$id'"); 

私はSQLとPHPの新機能です。私はすでに2つの別々の列を持つことによってこれが働いているが、私は可能な場合はSQLテーブルを簡素化したいと思います。

ありがとうございます。

+0

なぜ時間や日付のみを更新する必要がありますか?これがdatetimeが通常使用される理由です。そうでなければ 'CURTIME()'を使うことができます。これは現在の時刻を表示したり、現在の日付の 'CURDATE()'を返します。なぜこれを使うことができないのですか?私があなたの質問を理解できない場合は、あなたがそれをやっている理由を説明しようとしてください – ZverArt

+1

Datetimesはテーブルにフォーマットを持たないか、文字列として保存していると言いますか?あなたはしないでください。日時の適切な型は 'DATETIME'(または' TIMESTAMP')です。日時の日付部分を取得するには 'DATE'関数を使い、時間部分には' TIME'関数を使います。また、日付と時刻を別々に扱いたい場合は、別々に保管してください。これは、 'DATE'型の列と' TIME'型の型の列です。読み書きは簡単です。 –

答えて

5

私はあなたがaddtime()を使用したいと思う:

update lists 
    set datetime = addtime(@date, @time) 
    where id = @id; 

ではなく、ユーザーの入力値を使用してクエリ文字列をいじるよりも、適切なパラメータ化クエリを使用することを学びます。あなたのアプローチは、不可解な構文エラーにつながり、コードをSQLインジェクションに対して脆弱にする可能性があります。

+0

@Gordon Linoffよりも良いアプローチを示してください。 – Brano

+0

@zevart私のフォームには、DateとEventの開始時刻の2つの別々のフィールドがありますが、私のテーブルには既に2つの別々の列があります。 1つはTIMEデータ型のタイムスタートです。私が言ったように、これはアプリを単純化しようとする試みです。だから今私はこれらの2つの列をdatetimeとdatetimeと呼ばれるdatetimeにマージする場合、私はまた、私のPHPファイルで私のクリーンを修正する必要があります。その希望を明確にする。そうでない場合は、お気軽にお問い合わせください。また、私は新しいと言ったように、おそらくそれは不可能です。 – Brano

+0

@Thorsten Kettnerまあ、それはどのように私のSQLテーブルに書かれているので、私はそれがオーダー形式だと思っていたのです。この新しいdatetime列は、DATETIMEデータ型に格納されます。 – Brano

関連する問題