Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL PHP:Geting 0000-00-00:00:00当在datetime列中使用NOW()时_Php_Mysql - Fatal编程技术网

MySQL PHP:Geting 0000-00-00:00:00当在datetime列中使用NOW()时

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

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

我也尝试使用列格式作为时间戳,并使用:

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