MySQL服务器版本,用于在' AND epg_data.start附近使用正确的语法'' ORDER BY epg_data.start DESC'在第6行

时间:2017-10-17 21:50:27

标签: php mysql

嗨所有我继续得到这个错误它加载页面相当简单的一个我不能解决它是什么它我知道它说它但我很难过任何帮助将不胜感激

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在' AND epg_data.start''''' ORDER BY epg_data.start DESC'在第6行

 $query_Recordset1 = "SELECT streams.id, epg_data.lang, epg_data.start, epg_data.end, epg_data.description, streams_sys.stream_status, streams.stream_display_name, streams.stream_icon, epg_data.title AS epg_title
    FROM ((streams_sys
    LEFT JOIN streams ON streams.id=streams_sys.stream_id)
    RIGHT JOIN epg_data ON epg_data.channel_id=streams.channel_id)
    WHERE streams.id=".$_GET["id"]."
AND epg_data.start<NOW()
AND epg_data.end>'".$_GET["time"]."'
ORDER BY epg_data.start DESC";

1 个答案:

答案 0 :(得分:0)

我猜你的$_GET["id"]没有值,你的SQL语句最终包含了这个错误:

...WHERE streams.id=  AND epg_data.start<NOW()...

这当然是语法错误。

为自己做一个巨大的帮助并停止将变量插入到SQL查询中。它在SQL注入方面不安全,而且更难以解决它。

改为使用查询参数:

$query_Recordset1 = "
SELECT streams.id, epg_data.lang, epg_data.start, epg_data.end,
 epg_data.description, streams_sys.stream_status, streams.stream_display_name, 
 streams.stream_icon, epg_data.title AS epg_title
FROM ((streams_sys
LEFT JOIN streams ON streams.id=streams_sys.stream_id)
RIGHT JOIN epg_data ON epg_data.channel_id=streams.channel_id)
WHERE streams.id=?
AND epg_data.start<NOW()
AND epg_data.end>?
ORDER BY epg_data.start DESC";

请参阅?它变得如此简单。如果你正确地关闭内部或外部引号,就不再需要给自己一个眼睛疲劳。只需使用?代替变量。 不要试图在?周围加上引号。如果参数是数字,字符串或日期,则无关紧要。

然后准备并执行:

$stmt = $pdo->prepare($query_Recordset1);
$stmt->execute([$_GET["id"], $_GET["time"]]);

使用查询参数更容易,更安全。您会感谢自己切换到使用查询参数!

请注意,参数只能在通常使用常量值的位置使用。您不能使用表名,列名,SQL关键字或其他表达式的参数。仅限于使用单个文字值(如数字,带引号的字符串或引用日期)的位置。