Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
mysqli不能使用php日期_Php_Mysql_Date - Fatal编程技术网

mysqli不能使用php日期

mysqli不能使用php日期,php,mysql,date,Php,Mysql,Date,我有一个在varchar中有“data”列的表 和价值“21/10/2017” 现在,请尝试以下查询: $data = mysqli_real_escape_string($bd, date("j/m/y")); $result = mysqli_query($bd, "SELECT * FROM tracking where data='".$data."'"); 此查询返回0,但如果使用“dog”之类的随机字符串更改数据,并使用dog替换mysql中的数据,

我有一个在varchar中有“data”列的表

和价值“21/10/2017”

现在,请尝试以下查询:

$data = mysqli_real_escape_string($bd, date("j/m/y"));      
        $result = mysqli_query($bd, "SELECT * FROM tracking where data='".$data."'");
此查询返回0,但如果使用“dog”之类的随机字符串更改数据,并使用dog替换mysql中的数据,则查询工作正常,但我需要的是日期,而不是dog

如果使用
$data=“21//10//2017”thw查询工作为什么

您在
日期中使用了错误的日期。您获得的日期为
j/m/y
,格式为d/mm/yy,例如
21/10/17
,但数据库中的日期/字符串格式为dd/mm/yyyy

要获得完整的4位数版本中的年份,您需要使用
Y
而不是
Y
,即

$data = mysqli_real_escape_string($bd, date("j/m/Y"));   
注意:您可能也有月和日格式错误-您在PHP中使用的是一位数的日和两位数的月表示形式(例如,1/01/17而不是01/01/17),但您的字符串可能使用完整的两位数-我们无法在日期示例中说明。。。在这种情况下,您需要:

$data = mysqli_real_escape_string($bd, date("d/m/Y"));   
您在
日期中使用了错误的日期。您获得的日期为
j/m/y
,格式为d/mm/yy,例如
21/10/17
,但数据库中的日期/字符串格式为dd/mm/yyyy

要获得完整的4位数版本中的年份,您需要使用
Y
而不是
Y
,即

$data = mysqli_real_escape_string($bd, date("j/m/Y"));   
注意:您可能也有月和日格式错误-您在PHP中使用的是一位数的日和两位数的月表示形式(例如,1/01/17而不是01/01/17),但您的字符串可能使用完整的两位数-我们无法在日期示例中说明。。。在这种情况下,您需要:

$data = mysqli_real_escape_string($bd, date("d/m/Y"));   

我知道您使用的是
j/m/y
,根据手册
y
返回年份的最后2位数字,而不是您预期的4位数字,因此使用
y


但老实说,您必须将日期存储在
date
datetime
timestamp
类型中,而不是存储在
varchar

我看到您使用了
j/m/y
,根据手册
y
以最后2位返回年份,而不是您预期的4位,因此请改用
y



但老实说,您必须将日期存储在
date
datetime
timestamp
类型中,而不是存储在
varchar

可能将其存储为日期类型,而不是varcharIt是一个普通字符串,为什么如果字符串等于“21/10/2017”则不起作用??如果不是约会,而是连载?我需要为序列号使用日期?如果使用$data=“21//10//2017”;为什么查询工作?有一个半线索…如果你把它设为一个字符串,它就工作了。您是否从mysqli_real_escape_string函数中重复了$data是什么?更好的方法是使用$data=date(“j/m/y”);我也这么认为。您知道为什么要转义它吗?可能将其存储为日期类型,而不是varcharIt。它是一个普通字符串,为什么如果字符串等于“21/10/2017”则不起作用??如果不是约会,而是连载?我需要为序列号使用日期?如果使用$data=“21//10//2017”;为什么查询工作?有一个半线索…如果你把它设为一个字符串,它就工作了。您是否从mysqli_real_escape_string函数中重复了$data是什么?更好的方法是使用$data=date(“j/m/y”);我也这么认为。你知道为什么要转义它吗?这只是使用日期而不是字符串的一个原因——你不必匹配格式来搜索它们。其他原因是,您不能按日期排序、搜索日期范围、更改国际显示格式,或者基本上不能对日期执行任何操作,而只是按原样显示。@J.DoeCd不要忘记您的日期和月份格式也可能错误,正如我在回答中提到的。在您的示例中,
j/m/Y
格式适用于2017年10月21日,但它不适用于2017年10月1日这样的日期,这只是您使用日期而不是字符串的一个原因-您不必匹配格式来搜索它们。其他原因是,您不能按日期排序、搜索日期范围、更改国际显示格式,或者基本上不能对日期执行任何操作,而只是按原样显示。@J.DoeCd不要忘记您的日期和月份格式也可能错误,正如我在回答中提到的。在您的示例中,
j/m/Y
格式适用于2017年10月21日,但不适用于10月1日这样的日期/2017@user1598430你太容易泄露了。Op通过查看输出进行调试,从未发现它的格式错误。@TimBrownlaw至少他知道官方文档在哪里。+1表示日期时间/时间戳类型,在本例中,您还省略了非常不必要的mysqli_real_escape_字符串废话。不知道为什么要逃避php生成的日期。我以为问题是“/”,我已经尝试过使用escape=)@user1598430,但你太容易泄露了。Op通过查看输出进行调试,从未发现它的格式错误。@TimBrownlaw至少他知道官方文档在哪里。+1表示日期时间/时间戳类型,在本例中,您还省略了非常不必要的mysqli_real_escape_字符串废话。不确定为什么要转义php生成的日期。我以为问题是“/”并且我已经尝试了转义=)