Php 尝试在数据库mysql的DateTime字段中插入时出错

Php 尝试在数据库mysql的DateTime字段中插入时出错,php,mysql,Php,Mysql,我在很多论坛上都试过了 $date=date('Y-m-d H:i:s'); $query = "INSERT INTO temp_order(user_id ,item_id ,name ,price ,quantity, date) VALUES ({$_GET['cust_id']},{$_GET['item']},'{$content['name']}',{$content['price']},{$_GET['quan']},{$date})"; 但仍然会出现此错误“您的SQL语法有

我在很多论坛上都试过了

$date=date('Y-m-d H:i:s');

$query = "INSERT INTO temp_order(user_id ,item_id ,name ,price ,quantity, date) VALUES ({$_GET['cust_id']},{$_GET['item']},'{$content['name']}',{$content['price']},{$_GET['quan']},{$date})";
但仍然会出现此错误“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行“09:23:12”附近使用的正确语法”


我不知道那是什么意思。在这里,数据库中的日期列具有“datetime”类型。

它看起来好像您的日期值是不带引号的,因此它(sql)看起来是数据库

..., 09:23:12)
这是行不通的。尝试a)在使用前检查实际值,确保它被引用(如果必须使用字符串)和/或b)使用mysql内置的转换函数之一,以便传递的是日期对象而不是某种字符串


e、 g
STR_TO_DATE
documented

看起来您的日期值是不带引号的,因此它(sql)看起来是数据库

..., 09:23:12)
这是行不通的。尝试a)在使用前检查实际值,确保它被引用(如果必须使用字符串)和/或b)使用mysql内置的转换函数之一,以便传递的是日期对象而不是某种字符串


e、 g
STR_TO_DATE
documented

您缺少日期周围的引号。应该是:

$query = "INSERT INTO temp_order(user_id ,item_id ,name ,price ,quantity, date)
          VALUES ({$_GET['cust_id']},{$_GET['item']},'{$content['name']}',
                  {$content['price']},{$_GET['quan']},'{$date}')";

你错过了日期前后的引语。应该是:

$query = "INSERT INTO temp_order(user_id ,item_id ,name ,price ,quantity, date)
          VALUES ({$_GET['cust_id']},{$_GET['item']},'{$content['name']}',
                  {$content['price']},{$_GET['quan']},'{$date}')";

不要直接在查询字符串中插入变量。首先使用Zend_Db之类的方法
->quote()
变量,或者使用它的
->insert()
方法。@Pekka我尝试使用$dates,但仍然得到相同的错误您的实际问题是缺少
'{$date}'
周围的引号,但您最好将mysqli或pdo用于参数化查询。@Pekka웃: 不,:“MySQL允许一些关键字用作不带引号的标识符,因为很多人以前都使用过它们。下面的例子是:…
DATE
。@Wrikken啊,不错!不知道。不要将变量直接插入查询字符串。首先使用Zend_Db之类的方法
->quote()
变量,或者使用它的
->insert()
方法。@Pekka我尝试使用$dates,但仍然得到相同的错误您的实际问题是缺少
'{$date}'
周围的引号,但您最好将mysqli或pdo用于参数化查询。@Pekka웃: 不,:“MySQL允许一些关键字用作不带引号的标识符,因为很多人以前都使用过它们。下面的例子是:…
DATE
。@Wrikken啊,不错!我不知道。但当我回显$date时,它给出了这个2013-06-30 09:30:19,我认为它适合datetime字段。由于MySQL使用与
STR_TO_date
相同的方法自动转换字符串,为什么有必要这样做?@Barmar:因为混合数据类型是不好的做法。始终将日期对象指定给日期字段等。在通过网络发送内容之前,您希望尽快知道您的假定值是否有效。但当我回显$date时,它给出了2013-06-30 09:30:19,我认为这适用于datetime字段。由于MySQL使用与
STR_TO_DATE
相同的方法自动将字符串转换为日期,为什么有必要这样做?@Barmar:因为混合数据类型是不好的做法。总是给日期字段分配一个日期对象,等等。在发送数据之前,你想尽快知道你的假设值是否有效。