尝试为用户创建一个小搜索功能,这样他就可以在使用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
答案 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®Date=<?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