我有一个在Mysql中运行良好的查询
$日期
$date = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
$ date和$ imdb_id
的var_dumpstring '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
答案 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()
生成错误的参数,则可能有可能使用错误的参数。