0

使用以下代码中的 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

从另一个帖子,但无济于事。

谁能发现什么问题?

谢谢

编辑:顺便说一句,我正在使用从 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

4 回答 4

4

您没有转义任何数据。您的数据很可能会弄乱您的其余查询。您也很可能对 SQL 注入持开放态度。至少,您应该使用mysql_real_escape_string(),但最好将准备好的查询与 PDO一起使用。

于 2012-04-05T14:03:22.557 回答
1

如果字段是 TIMESTAMP 类型

尝试

$this->db->query("INSERT INTO orders VALUES (null, '$id', '$this->basket_lines', '$this->total', CURRENT_TIMESTAMP() )");
于 2012-04-05T14:06:46.217 回答
1

我认为查询本身没有任何问题。

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

于 2012-04-05T14:07:25.430 回答
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 查询。

于 2012-04-05T14:42:11.097 回答