Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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搜索为日期\格式不起作用_Mysql - Fatal编程技术网

MySQL搜索为日期\格式不起作用

MySQL搜索为日期\格式不起作用,mysql,Mysql,我的数据库中有一个字段作为文本,我知道我应该使用date,但这个字段的值可能比date多。因为它们只是少数,所以它不会提升性能 我的问题是查询,因为它总是不返回值。但是,如果我手动进行查询,它会工作得很好。我想这一定是由于预先准备好的语句中的查询导致的,但无法得到它 $date = date("d/m/Y"); $query = "SELECT * FROM projects WHERE DATE_FORMAT(expiredate, '%d/%m/%Y') >= DATE_FORMAT(

我的数据库中有一个字段作为文本,我知道我应该使用date,但这个字段的值可能比date多。因为它们只是少数,所以它不会提升性能

我的问题是查询,因为它总是不返回值。但是,如果我手动进行查询,它会工作得很好。我想这一定是由于预先准备好的语句中的查询导致的,但无法得到它

$date = date("d/m/Y");
$query = "SELECT * FROM projects WHERE DATE_FORMAT(expiredate, '%d/%m/%Y') >= DATE_FORMAT(?, '%d/%m/%Y') && id >= (SELECT FLOOR( MAX(id) * RAND()) FROM adsfixed ) ORDER BY id LIMIT 1";

该查询应该在projects表中获得一个随机行,其中expiredate列大于或等于今天的d/m/Y格式,不知道逻辑是否正确,因此我尝试解释我需要什么。

将参数转换为日期而不是日期转换为字符串:

$query = "SELECT * FROM projects WHERE Date(expiredate) >= str_to_date(?, '%d/%m/%Y') && id >= (SELECT FLOOR( MAX(id) * RAND()) FROM adsfixed ) ORDER BY id LIMIT 1";

不要将字符串与日期进行比较。您必须比较日期,我该怎么做,因为字段是字符串,我需要将其作为日期进行搜索?请参见下面的我的答案手动查询,使用准备好的语句。这表示您运行的查询不同。我需要将查询更改为使用日期格式?,“%d/%m/%Y”,它不起作用。方法任何错误消息或错误数据?它不返回任何值,但应该返回,因为我在表中有一条记录,其中expiredate为2017年11月5日。@Tiago您检查过了吗,您绑定的数据是否符合预期?已经发现问题。由于我的列是如上所述的文本,因此我无法以日期或日期\格式进行查询。我使用了你的信息并做了一些更改。在两种形式中都使用了函数str_to_date,现在就可以使用了。谢谢其中str_to_dateexpiredateDate,'%d/%m/%Y'>=str_to_date?,'%d/%m/%Y'&&id>=按id限制从adsfixed ORDER中选择楼层最大id*RAND1@Tiago将日期存储为文本是不好的数据库设计。我会改变的