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

标签 php mysql

大家好,我不断收到此错误,它加载一个页面非常简单,我无法弄清楚它是什么,我知道它说的是,但我很困惑任何帮助将不胜感激

您的 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/

相关文章:

php - MySQL 更新不起作用?

php - 使用 simplexml 将 XML 导入 MySQL

php - 将 CSS 类分配给第一个和第三个 html 元素

php - Ajax - 将内容加载到 Textarea 中

mysql - 如何使用 WHERE id IN(1,2,3,4) 获得均匀分布

php - 使用 PHP 将 MySQL-spatial 更改为 geoJson

mysql - mysql 表中的订单项目,其中订单以特定 [mutable] 列的值为条件

mysql - 我无法在带有 auto_increment 列的表中插入一行

php - 我什么时候应该向 AJAX 返回 true/false 以及什么时候应该 echo "true"/"false"

mysql - SQL UPDATE 语句中涉及子查询的错误