使用以下代码中的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() )");
仍然没有工作,这一切都很奇怪?
答案 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查询。