MySQL日期查询不起作用

时间:2014-08-06 14:21:44

标签: php mysql sql date

我从w3schools关注此示例,以从mysql数据库中获取数据并在页面上显示结果。

这是我更新的代码:

HTML:

<html>
<head>
<script>
function showresult(str) {
  if (str=="") {
    document.getElementById("txtHint").innerHTML="";
    return;
  } 
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","getquery.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<form>
<select name="Reg Date" onchange="showresult(this.value)">
<option value="">Select Date:</option>
<option value="1">30/07/2014</option>
<option value="2">29/07/2014</option>
<option value="3">28/07/2014</option>
</select>
</form>
<br>
<div id="txtHint"><b>Result here.</b></div>

</body>
</html>

PHP:

<?php
$q = intval($_GET['q']);

$con = mysqli_connect('localhost','root','password','mydb');
if (!$con) {
  die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM customers WHERE reg_date = '".$q."'";
$result = mysqli_query($con,$sql);

echo "<table border='1'>
<tr>
<th>Client Name</th>
<th>Registration Date</th>
</tr>";

while($row = mysqli_fetch_array($result)) {
  echo "<tr>";
  echo "<td>" . $row['client_name'] . "</td>";
  echo "<td>" . $row['reg_date'] . "</td>";
  echo "</tr>";
}
echo "</table>";

mysqli_close($con);
?>
  1. 当我选择任何日期时,在我将选择语句 reg_date = 更改为 reg_date&gt; = (具有大于号码)之前没有任何反应&gt;)但是这也会显示超过所选日期的日期结果。

  2. 如何使用日期选择器,以便选择任何日期。

  3. 我还注意到,当我随机选择任何日期时,在显示结果之前会有轻微的延迟或小时玻璃显示。我相信这是由于我在数据库中记录的数量(查看超过20K条目)。

  4. 我很高兴有人能帮助或指出我正确的方向,因为我对这段编码不熟悉。

3 个答案:

答案 0 :(得分:1)

您应该尝试使用STR_TO_DATE(字符串,格式)函数将常量转换为日期。例如,我的MYSQL实例没有正确地将字符串变量转换为日期。我认为它可以与位置设置相关联。

$sql="SELECT * FROM customers WHERE reg_date = STR_TO_DATE('".$q."','%d/%m/%Y')";

答案 1 :(得分:1)

假设“reg_date”字段为“2014-07-30”格式。

HTML:

......
<select name="Reg Date" onchange="showresult(this.value)">
<option value="">Select Date:</option>
<!-- your date format is err. No wonder I was wrong the wrong -->
<option value="07/03/2014">07/03/2014</option>
<option value="07/09/2014">07/09/2014</option>
<option value="07/28/2014">07/28/2014</option>
</select>
.....

PHP:

<?php
 //you can var_dump $q ,$q value like 2014-07-30
 $q = date('Y-m-d',strtotime($_GET['q']));
 //Desired result  sql “SELECT * FROM customers WHERE reg_date = '2014-07-30'”
 ......

你必须学习var_dump变量。 对不起,我的英语不好。

答案 2 :(得分:0)

您确定下拉的值(&#34; 1&#34;,&#34; 2&#34;和#34; 3&#34;)与您的格式相比格式正确在&#34; reg_date&#34;数据库中的列?

如果列中有&#34; date&#34;格式化数据库中的日期格式为&#34; YYYY-MM-DD&#34;,在您的情况下&#34; 2014-07-30&#34;,&#34; 2014-07-29&#34 ;和&#34; 2014-07-28&#34;。

尝试将其用作下拉列表中的值,并将行intval($ _ GET [&#39; q&#39;])更改为类似的内容,以此格式清理数据库输入:

if (preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/",$_GET['q'])) 
{ 
$q = $_GET['q']
}

有关mysql日期和日期时间的更多信息: http://dev.mysql.com/doc/refman/5.0/en/datetime.html