Php Between子句返回0条记录
数据库中有3条记录与条件匹配,但当我使用BEVERY子句运行查询时,它得到0条记录Php Between子句返回0条记录,php,mysql,Php,Mysql,数据库中有3条记录与条件匹配,但当我使用BEVERY子句运行查询时,它得到0条记录 $current_date = date('m-d-Y', strtotime('monday this week')); $upcoming_date = date('m-d-Y', strtotime('monday next week')); $sql = mysqli_query($connection, "SELECT * FROM result WHERE test_date BETWEEN $
$current_date = date('m-d-Y', strtotime('monday this week'));
$upcoming_date = date('m-d-Y', strtotime('monday next week'));
$sql = mysqli_query($connection, "SELECT * FROM result WHERE test_date BETWEEN $current_date AND $upcoming_date AND login = '".$_SESSION['uid'] ."'");
$total_check = mysqli_num_rows($sql);
这是我的数据库
result_id`, `login`, `test_id`, `test_date`,
(1, '2', 6, '08-03-2016',
(2, '2', 5, '08-03-2016',
(3, '2', 3, '08-03-2016',
当我得到0个结果,$\u会话['uid']为2时,请告诉我我哪里做错了,我做错了什么。对于$current\u date和$comming\u date,您应该使用
“从测试日期介于“$current\u date”和“$comming\u date”之间的结果中选择*并登录=”。“$\u会话['uid']”。”“
使用下面的prepare语句来避免
您应该对$current\u date和$comming\u date使用
“
“从测试日期介于“$current\u date”和“$comming\u date”之间的结果中选择*并登录=”。“$\u会话['uid']”。”“
使用下面的prepare语句来避免
如果要在范围搜索中使用日期,例如在之间使用,则存储日期不正确。必须将它们存储在
DATE
列中。将它们存储在VARCHAR()列中是个坏主意
你可以用这样的东西,用来处理你设计错误的桌子
$current_date = date('Y-m-d', strtotime('monday this week'));
$upcoming_date = date('Y-m-d', strtotime('monday next week'));
$sql = mysqli_query($connection, "SELECT * FROM result WHERE STR_TO_DATE(test_date,'%d-%m-%Y') BETWEEN '$current_date' AND '$upcoming_date' AND login = '".$_SESSION['uid'] ."'");
让MySQL比较字符串01-01-2016
和12-31-2015
,并确定后者先于前者是不合理的。字符串比较是词汇性的。然而,2015-12-31
显然在2016-01-01
之前
这有点棘手,因为文本字符串
08-08-2016
偶然出现在08-15-2016
之前。但是到了年底,事情就崩溃了。如果你想在范围搜索中使用日期,比如和之间的搜索,那么你存储的日期就不正确了。必须将它们存储在DATE
列中。将它们存储在VARCHAR()列中是个坏主意
你可以用这样的东西,用来处理你设计错误的桌子
$current_date = date('Y-m-d', strtotime('monday this week'));
$upcoming_date = date('Y-m-d', strtotime('monday next week'));
$sql = mysqli_query($connection, "SELECT * FROM result WHERE STR_TO_DATE(test_date,'%d-%m-%Y') BETWEEN '$current_date' AND '$upcoming_date' AND login = '".$_SESSION['uid'] ."'");
让MySQL比较字符串01-01-2016
和12-31-2015
,并确定后者先于前者是不合理的。字符串比较是词汇性的。然而,2015-12-31
显然在2016-01-01
之前
这有点棘手,因为文本字符串08-08-2016
偶然出现在08-15-2016
之前。但是到了年底,事情就崩溃了。我想你在日期上遗漏了引号!!更好地使用prepare语句!!在mysql控制台中复制粘贴生成的查询并查看它提供了什么。执行SQL语句后检查错误。(提示:mysqli_error())2个问题。1) 您的日期是否以字符串或日期时间的形式存储在数据库中。2) 你有没有考虑过你的数据库日期格式是mm-dd-yyy而不是m-d-y?我不认为BETWEEN可以处理m-d-y格式的日期我认为你在日期中缺少引号!!更好地使用prepare语句!!在mysql控制台中复制粘贴生成的查询并查看它提供了什么。执行SQL语句后检查错误。(提示:mysqli_error())2个问题。1) 您的日期是否以字符串或日期时间的形式存储在数据库中。2) 你有没有考虑过你的数据库日期格式是mm-dd-yyyy而不是m-d-y?我不认为BETWEEN会使用m-d-y格式的日期,否则,查询将在2016-01-01和2016-01-10之间变成,,例如,MySQL将不会在字符串中处理它们-它可能会将它们视为整数进行减法。@泰米尔语我太傻了,为什么我忘记了单引号?你的想法对我有效,我还将其更改为“准备好的状态”谢谢manThis,直到你有一周的时间月底。然后它就坏了,没错,否则,查询将在2016-01-01和2016-01-10之间变成,,例如,MySQL将不会在字符串中处理它们-它可能会将它们视为整数进行减法。@泰米尔语我太傻了,为什么我忘记了单引号?你的想法对我有效,我还将其更改为“准备好的状态”谢谢manThis,直到你有一周的时间月底。谢谢你提供了一个知识渊博的答案谢谢你提供了一个知识渊博的答案