大家好,我不断收到此错误,它加载一个页面非常简单,我无法弄清楚它是什么,我知道它说的是,但我很困惑任何帮助将不胜感激
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 6 行“AND epg_data.start”ORDER BY epg_data.start DESC”附近使用的正确语法
$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";
最佳答案
我猜测您的 $_GET["id"]
没有值,并且您的 SQL 语句最终包含此错误:
...WHERE streams.id= AND epg_data.start<NOW()...
这当然是一个语法错误。
帮自己一个大忙,停止将变量插入 SQL 查询中。它对于 SQL 注入(inject)来说是不安全的,而且更重要的是它太困难了。
改用查询参数:
$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 关键字或其他表达式使用参数。仅当您使用单个文字值(例如数字、带引号的字符串或带引号的日期)时。
关于php - MySQL 服务器版本,用于在第 6 行 'AND epg_data.start' ' ORDER BY epg_data.start DESC' 附近使用正确的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46799780/