【问题标题】:php mysql datetimephp mysql 日期时间
【发布时间】:2011-06-12 15:04:46
【问题描述】:

我在 MySQL 中有两个表,每个表都有自己的 datetime 字段。 我想复制表 A 的日期时间来覆盖表 B 的日期时间。 我使用 PHP。

$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] 具有日期时间字段的字符串表示形式。

但是覆盖操作没有生效。如何使用php覆盖表B的日期时间字段?

如果我坚持使用 $row[2] 来分配新的 datetime 字段而不是再次运行 mysql_query,该怎么办?

【问题讨论】:

  • 是静默失败还是抛出错误?如果是这样,错误是什么?
  • 只是提示,您可以直接在一个 sql 查询中执行此操作:UPDATE b SET date_cal = (SELECT date_cal FROM a WHERE id = $key) WHERE id = $key
  • @OMG Ponies:这叫做“变量插值”。 "WHERE ID = $key" 有效,PHP 会将$key 替换为其值。
  • 静默失败。没有错误抛出。答案有效。但是如果我需要使用 $row[2] 来分配 datetime 字段,我应该怎么做才能使它正确?

标签: php mysql datetime


【解决方案1】:

我相信您需要在更新查询中将日期括在引号中。

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")

【讨论】:

  • 好点,取决于数据类型。如果是 INT,则不需要单引号。
  • 它有效。但是如果我坚持使用 $row[2] 来分配 datetime 字段并且不再使用 select 查询,我该怎么做才能使它正确?
  • 如果您不打算更改数据库架构,那么您所拥有的就可以了。问题是当您忘记并在 6 个月后更改数据库时,然后想知道您的网站为什么会损坏。
【解决方案2】:

如果我理解正确,您可以在查询中执行相同操作:

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

【讨论】:

  • 它有效。但是如果我需要使用 $row[2] 来分配 datetime 字段,我应该怎么做才能使它正确?
猜你喜欢
  • 2013-06-16
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多