【发布时间】:2025-11-30 11:30:01
【问题描述】:
我正在尝试使用 GET 变量在 PHP 类中运行一个简单的 SELECT 查询。
$this->Token = $_GET['Token'] ?? null;
function getRows(){
$query = $this->db->query("SELECT * FROM store_product_images WHERE token = ".$this->Token." ORDER BY display_order ASC");
当我运行它时,什么都没有显示,如果我删除 WHERE 它工作正常
【问题讨论】:
-
您的代码容易受到SQL injection 攻击。不要使用字符串连接构建查询,而是始终使用prepared statements 和bound parameters。请参阅 this page 和 this post 了解一些很好的示例。
-
如果
token是一个字符串,你需要在值周围加上引号,但是使用准备好的语句可以解决这个问题和其他一些问题。 -
@NigelRen 它周围有引号吗?你能给我举个例子来说明你的意思吗?
-
您错过了表示您在查询中传递了一个字符串的引号。你最好这样写
[...] WHERE token = '{$this->Token}' ORDER BY [...]。无论如何,你真的应该考虑转义你的价值,或者更好地使用准备好的语句,正如另一个人提到的那样,你的代码容易受到 SQL 注入的攻击。