PDO PHP中的日期格式

时间:2013-06-04 10:34:02

标签: php mysql pdo

我有一个在Mysql中运行良好的查询

$日期

$date = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));

$ date和$ imdb_id

的var_dump
string '2013-06-04' (length=10)
string '2244871' (length=7)

制备

SELECT * FROM show_episode, show_episode_airdate, show_network, shows 
WHERE show_episode.imdb_id_show = :imdb_id 
AND show_episode.episode_id = show_episode_airdate.episode_id 
AND show_network.show_id = shows.id 
AND shows.imdb_id = show_episode.imdb_id_show 
AND show_episode_airdate.airdate >= :date 
ORDER BY show_episode_airdate.airdate ASC LIMIT 3

这是PHP:

$checkunaired = $conn->prepare('SELECT * FROM show_episode, show_episode_airdate, show_network, shows WHERE show_episode.imdb_id_show = :imdb_id AND show_episode.episode_id = show_episode_airdate.episode_id AND show_network.show_id = shows.id AND shows.imdb_id = show_episode.imdb_id_show AND show_episode_airdate.airdate >= :date ORDER BY show_episode_airdate.airdate ASC LIMIT 3');
$checkunaired->execute(array(':imdb_id' => $imdb_id, ':date' => $date));

:日期为$ date,格式为'Y-m-d',show_episode_airdate.airdate为日期格式为'Y-m-d'的列(虽然我不确定Mysql是否知道它们是日期?)

当我在phpmyadmin中使用'2013-06-04'而不是:date尝试查询时,它会返回我想要的内容但是当我在代码中使用它时似乎忽略了日期参数?

有谁知道为什么?

编辑:

  $unairedepisodessql = $conn->prepare('SELECT * FROM show_episode, show_episode_airdate, show_network WHERE show_episode.imdb_id_show = :imdb_id AND show_network.show_id = :show_id AND show_episode.episode_id = show_episode_airdate.episode_id AND show_episode_airdate.airdate >= :date LIMIT 3');
                        $erro = $unairedepisodessql->errorCode();
                        var_dump($erro);

返回null

1 个答案:

答案 0 :(得分:0)

首先要做的事情;您可以使用MySQL的连接语句有效地执行相同的查询:

SELECT se.*, s.*, sea.*, sn.*
FROM show_episode se
INNER JOIN show_episode_airdate sea
    ON se.episode_id = sea.episode_id 
INNER JOIN show_network sn, shows s   ## This part might be a bit wrong....
    ON ( s.imdb_id = se.imdb_id_show 
        AND sn.show_id = s.id )
WHERE se.imdb_id_show = :imdb_id 
    AND sea.airdate >= :date 
ORDER BY sea.airdate ASC 
LIMIT 3

现在,对于手头的问题。

您确定专栏airdate是否具有MySQL DATE数据类型?您可以使用SHOW CREATE TABLE show_episode_airdate查找。

PHP中的$date变量是否也包含字符串'2013-06-04'?你是如何设定这个值的?如果使用date()生成错误的参数,则可能有可能使用错误的参数。