PHP / MySQL / PDO从数据库中搜索日期

时间:2015-10-14 15:54:07

标签: php mysql date pdo

尝试为用户创建一个小搜索功能,这样他就可以在使用HTML / PHP制作的网页上输入日期,并查看数据库中的哪些人在(日期)之后或之后注册为成员。我的用户以2015-10-01格式输入日期。这将被发送到一个带有jqxGrid的PHP页面,其中填充了符合MySQL数据库查询的成员的成员详细信息(使用PDO)。

查询在传递的字符串上使用运算符> =(例如)" 2015-10-01"在WHERE子句中,所以我使用STR_TO_DATE来进行比较:

WHERE `lastUpdated` >= STR_TO_DATE( ? , '%Y-%m-%d');

使用PDO,?以后绑定到日期(以字符串形式传递)。

注册日期的db列采用DATETIME格式,db值如下所示:" 2015-10-12 17:12:52"。

我的查询每次返回一个空数组,并且在经过数小时尝试日期格式的每个可想到的排列后,在MySQL语句和准备数据以填充网格的页面上都是如此。

有人能告诉我这里有什么问题吗?

谢谢! SP

3 个答案:

答案 0 :(得分:0)

成功

WHERE `lastUpdated` > ?

并检查您的数据和内容。

基本上,在原始SQL工作之前,不应该触摸PDO。

答案 1 :(得分:0)

好的,所以这里有PDO版本可以运行 - 传入?而不是日期:

function getJSONAllMembersByDate($PDOdbObject, $regDate)
{
    try
    {
        $membersByDateSQL = "SELECT `id`, `name_first`, `name_last`, `organization`,`email`, `phone`,`source`,`comments`,`language_id`, `lastUpdated` FROM `member` WHERE lastUpdated>=?";//'$regDate'

    $get=$PDOdbObject->prepare($membersByDateSQL); 
    $get->execute(array($regDate));
    $rows = $get->fetchAll(PDO::FETCH_ASSOC);

    $json=json_encode($rows);
    return $json;
}

它的工作原理证明包含jqxwidget的文件中存在其他错误(我之前发布的版本)。我当然尝试了大约一百万种不同的东西来实现这一目标。

答案 2 :(得分:-2)

我不知道这是否算作答案,但至少它起作用了!这个问题有很多变量 - json,jqxgrid,pdo ......不要忘记有几种方法可以使用PDO。我可能在不同的地方有过几次错误。

(@ apokryfos,STR_TO_DATE确实没必要。)

最后,这是有效的:

在包含jqxGrid的PHP页面中,发送到服务器的URL是:

    url: 'my-json-responses.php?fct=getJSONAllMembersByDate&regDate=<?php echo $fromDate ?>'

当用户在输入页面上输入日期(格式为2015-10-01)时,此$ fromDate来自$ _POST。加载包含jqxGrid的PHP页面时,它会

    $fromDate = $_POST['regDate'];

url通过文件my-json-reponses.php“转换”,其中包含许多函数。它找到了正确的一个:

if ($_GET['fct'] == 'getJSONAllMembersByDate')
{
        $result = getJSONAllMembersByDate($connectionObject, $_GET['regDate']);
        echo $result;
}

在包含所有PDO数据库请求的文件上调用$ result,包括:

function getJSONAllMembersByDate($PDOdbObject, $regDate) { try
{
    $membersByDateSQL = "SELECT `id`, `name_first`, `name_last`, `organization`,`email`, `phone`,`source`,`comments`,`language_id`, `lastUpdated` FROM `member` WHERE lastUpdated>='$regDate'";

    $get=$PDOdbObject->query($membersByDateSQL); 
    $rows = $get->fetchAll(PDO::FETCH_ASSOC);

    $json=json_encode($rows);
    return $json;
}
catch (PDOException $e)
{
    echo "There was a problem getting all members with this search query.";
    echo $e->getMessage();
}}

请注意,我无法使用“?”制作版本在查询工作中,因此直接传递变量$ regDate,在变量周围用单引号只是为了让生活变得有趣。

这将返回2015-10-01所有用户的一个很好的列表 - 但可能仍然对MySQL注入攻击开放......

但经过这次马拉松式的调试后,我现在很开心。 (当然欢迎所有改进!) SP