php - MySQL 查询的 $_GET 导致未知列错误

标签 php mysql

我有一系列链接,可将信息传递到新页面以运行 MySQL 查询。这是源代码的链接之一:

<a class="bloglink" href="parknews.php?tpf_news.park_id=5">

这是生成链接的代码:

<a class="bloglink" href="parknews.php?tpf_news.park_id=<?php echo $row2['park_id'];?>">
<?php echo $row2['name']; ?>
</a>

使用该信息的查询位于此处:

$park_id = $_GET['tpf_news.park_id'];
$sql = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS date, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id = $park_id ORDER BY date DESC' ;

这会导致显示此错误:

Error fetching news: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$park_id' in 'where clause'

我不明白为什么它不起作用。如果在查询中我将 WHERE tpf_news.park_id = $park_id 替换为 WHERE tpf_news.park_id = 6 (或任何其他数字),则效果很好。

有什么想法吗?

最佳答案

当字符串用引号引起来时,不会对变量进行插值。所以你需要使用双引号代替:

$sql = "SELECT headline, story, DATE_FORMAT(date, '%d-%M-%Y') AS date, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id = $park_id ORDER BY date DESC" ;

或者使用串联:

$sql = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS date, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id WHERE tpf_news.park_id =' .  $park_id .' ORDER BY date DESC' ;

仅供引用,您也对SQL injections持开放态度。

关于php - MySQL 查询的 $_GET 导致未知列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16451511/

相关文章:

java - 当在mysql数据库的日期时间列中插入日期和时间时,它将插入日期,但时间是00-00-00

PHP 许可证 key 生成器

Php 从循环中选中复选框

php - 我如何在 PHP 编码中包含 ajax 以在同一页面中显示数据

mysql - 当名字和姓氏存储在不同的列中时如何搜索全名

jquery - 使用jquery从jsp中的数据库过滤表

php - 在表单中使用 DateIntervalType 类

php - 当对数据库中的字段使用 UNIQUE 时,如何捕获查询错误消息?

php - PDO 连接字符串 : What is the best way to do it?

mysql - 使用join插入到两个mysql表中