MySQL PHP:Geting 0000-00-00:00:00当在datetime列中使用NOW()时
在以下代码中使用SQL:MySQL PHP:Geting 0000-00-00:00:00当在datetime列中使用NOW()时,php,mysql,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(); } 如果上面的最后一列是DATETIM
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 我也尝试使用列格式作为时间戳,并使用:
ALTER TABLE `content ` CHANGE `date` `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
从另一个职位,但没有用
有人能看出哪里出了问题吗
谢谢
编辑:顺便说一句,我正在使用
$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() )");
仍然不工作,这一切都很奇怪?您没有逃逸任何数据。很有可能,您的数据正在打乱查询的其余部分。您很可能对SQL注入非常开放。至少,您应该使用,但如果字段类型为TIMESTAMP,则最好使用。 试一试
我看不出这个查询本身有什么问题 然而,我想建议你阅读这两个链接。
您使用mysql的方式存在巨大的安全风险。您的转义概念错误,您需要转义将插入数据库中的数据,以防止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查询。谢谢,我的db类通过-$this->SQL=$this->mysqli->real\u escape\u string$SQL处理esaping$this->result=$this->mysqli->query$SQL;-这还足够吗?@GHarping,绝对不行。事实上,我并不指望这真的能起到多大作用!您不能逃避整个查询。你应该逃避这些数据。转义数据不仅仅是让事情变得安全的魔法。您对数据进行转义,以向查询解析器表明您的意思是将特定字符作为数据,因此它们不会被解释为SQL。我不知道你是从哪里找到DB类的,但是你应该扔掉它,用PDO.GHarping重新开始,也许这是你问题的根本原因。正如@Brad所说,您必须转义所有数据,但不能转义整个查询。请不要逃避调试,检查问题是否仍然存在。谢谢你的建议,从现在起我一定会这么做。但是仍然不工作,非常混乱?-$i=mysql\u real\u escape\u string$id$b=mysql\u real\u escape\u string$this->basket\u line$t=mysql\u real\u escape\u string$this->total$这->数据库->查询插入到订单值null,$i',$b','t',现在@GHarping I发布了一个完整的答案,其中包含转义和测试所需的代码。数据库一直默认为0000-00-00 00:00:00:这意味着时间戳或日期字段类型为空。当前的时间戳实际上是一个别名:$SQL的输出是什么?检查一下可能会有帮助。例如,如果$SQL在PHPMyAdmin中出现错误,您是否可以手动插入$SQL并进行post?多亏您自己和Brad,这一点得到了解决。是什么导致了问题?现在我很好奇;不客气:
$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);