2011-01-20 11 views
1

私はMySQLに2つのテーブルを持ち、各テーブルには独自のdatetimeフィールドがあります。 テーブルAのdatetimeをコピーして、テーブルBのdatetimeを上書きしたいとします。 私はPHPを使用します。php mysql datetime

$result = mysql_query("select * 
         from A 
         where id = $key"); 
$row = mysql_fetch_array($result); 
print $row[2]."\n"; // $row[2] is the datetime field 
mysql_query("update B 
       set date_cal = $row[2] 
       where id = $key") // try to overwrite datetime in table B 

$ row [2]はdatetimeフィールドの文字列表現を持っています。

ただし、上書き操作は有効ではありません。 PHPを使用してテーブルBのdatetimeフィールドを上書きする方法は?

mysql_queryをもう一度実行して、新しいdatetimeフィールドを割り当てるために$ row [2]を使用するとしたらどうしますか?

+1

をそれは静かに失敗していますかエラーが発生しましたか?もしそうなら、エラーは何ですか? – dnagirl

+2

ちょうどヒントですが、これは1つのsqlクエリで直接行うことができます: 'UPDATE b SET date_cal =(SELECT date_cal FROM a WHERE id = $ key)WHERE id = $ key'。 – alexn

+0

@OMGポニー:これは「変数補間」と呼ばれています。 '" WHERE ID = $ key "'は有効で、PHPは '$ key'をその値に置き換えます。 –

答えて

2

更新クエリで日付を引用符で囲む必要があると思います。

mysql_query("update B set date_cal=$row[2] where id=$key")
は別のノートで
mysql_query("update B set date_cal='$row[2]' where id=$key")

すべきであり、私はあなたがSELECT *クエリをやっているときに、インデックスではないアクセスあなたのフィールドを行うすることをお勧めしたいです。データベースに別のフィールドを追加すると、$row[2]は別のものを参照する可能性があります。あなたの代わりに$row = mysql_fetch_assoc($result);を呼び出す場合は、フィールドの名前で参照することができ、例えば
mysql_query("update B set date_cal='{$row['date_field]}' where id=$key")

+0

良い点は、データ型によって異なります。 INTの場合、一重引用符は必要ありません。 –

+0

それは動作します。しかし、datetimeフィールドを代入するために$ row [2]を使用し、selectクエリを再度使用しないと主張すると、どうすれば正しいことができますか? – chnet

+0

データベーススキーマの変更を計画していない場合、あなたが持っているものは大丈夫です。問題は、6ヵ月後にデータベースを忘れて変更した後、あなたのウェブサイトが壊れている理由が不思議に思うときです。 –

2

私はそれを正しく理解していれば、あなたはあなたのクエリ内から同じ操作を行うことができます。

update B 
    set date_cal = (select date_cal from A where id = {$key}) 
where id = $key 
+0

それは動作します。しかし、datetimeフィールドを割り当てるために$ row [2]を使用する必要がある場合は、それを正しくするために何をする必要がありますか? – chnet