MySQL PHP:在datetime列中使用NOW()的时候00:00:00获取

时间:2012-04-05 13:56:33

标签: php mysql

使用以下代码中的SQL:

public function saveOrder() {
  $id = $this->getUserId();
  $this->db->query("INSERT INTO orders VALUES (null, '$id', '$this->basket_lines', '$this->total', NOW() )");
  return $this->db->id();  
}

如果上面的最后一列是DATETIME字段,则数据库中的结果会默认为0000-00-00 00:00:00

我也尝试将列格式设为timestamp并使用:

ALTER TABLE  `content ` CHANGE  `date`  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

来自另一篇文章,但无济于事。

有人能发现什么错误吗?

由于

编辑:BTW我正在使用

从DB类中转义我的SQL语句
    $this->SQL = $this->mysqli->real_escape_string($SQL);
    $this->result = $this->mysqli->query($SQL);

编辑2:我现在正在使用

转义预查询
 $i=mysql_real_escape_string($id);
    $b=mysql_real_escape_string($this->basket_lines);
    $t=mysql_real_escape_string($this->total);
    $this->db->query("INSERT INTO orders VALUES (null, '$i', '$b', '$t', NOW() )"); 

仍然没有工作,这一切都很奇怪?

4 个答案:

答案 0 :(得分:4)

您没有转发任何数据。很有可能,您的数据会弄乱您的其余查询。您很可能对SQL注入持开放态度。至少,您应该使用mysql_real_escape_string(),但最好使用prepared queries with PDO

答案 1 :(得分:1)

如果字段的类型为TIMESTAMP

尝试

$this->db->query("INSERT INTO orders VALUES (null, '$id', '$this->basket_lines', '$this->total', CURRENT_TIMESTAMP() )");

答案 2 :(得分:1)

我没有看到查询本身有任何问题。

但是我想建议你阅读这两个链接 http://nl.php.net/manual/en/book.pdo.php
http://nl3.php.net/manual/en/function.mysql-real-escape-string.php
你使用mysql的方式是一个巨大的安全风险。

答案 3 :(得分:1)

你有逃避概念错误,你需要转义你将在DB中插入的数据,以防止SQL注入,而不是整个查询! 所以你应该这样做:

$id=$this->mysqli->real_escape_string($id);
$basketlines=$this->mysqli->real_escape_string($this->basket_lines);
$total=$this->mysqli->real_escape_string($this->total);   
$SQL="INSERT INTO orders VALUES (null, '$id', '$basketlines', '$total', NOW() )");
$this->result = $this->mysqli->query($SQL);

我很确定您的所有问题都是因为当转义整个查询时,查询会变得格式错误,而不再是有效的SQL查询。