在我的表中,我有查询:
$sql="SELECT * FROM `jom_x1_organizatori`
WHERE Organizator='".$sta_dalje."' Order by `Struka`,`Zanimanje`";
来自另一个表的 $sta_dalje
= $ _ POST [“state_id”],值为:
案例1工作。
如何进行查询?
答案 0 :(得分:1)
最重要的是:永远不要通过将查询字符串与用户输入连接来构建查询!如果这样做,则使用库的专用函数(例如mysqli_real_escape_string
)来转义输入。如果没有逃脱,您将打开一个潜在的安全漏洞(称为SQL injection)。
"ПРИМУС" Градишка
无法正常工作,因为在连接后,查询将无效。现在想象一下,如果我发布以下输入会发生什么:'; DROP TABLE jom_x1_organizatori; --
您的查询将是:
SELECT * FROM `jom_x1_organizatori`
WHERE Organizator=''; DROP TABLE jom_x1_organizatori; --' Order by `Struka`,`Zanimanje`
每当你可以使用prepared statements
绑定参数(并让库来完成工作),但总是转义并验证你的输入(使用预处理语句,转义是由库完成的)!
$sta_dalje = (sting)$_POST["state_id"]; // Do filtering, validating, force type convertation, etc!!
// Prepare the statement (note the question mark at the end: it represents the parameter)
$stmt = $mysqlLink->mysqli_prepare(
"SELECT * FROM `jom_x1_organizatori` WHERE Organizator = ?"
);
// Bind a string parameter to the first position
$stmt->bind_param("s", $sta_dalje);
有关准备好的陈述的更多信息:
请注意,旧的mysql
扩展程序已弃用,如果没有必要,请不要使用它!
只是旁注
不要使用SELECT * FROM
,请始终列出列。它可以防止查询不必要的数据,并且您的代码将更能抵抗数据库更改,而且调试将会更简单一些。
答案 1 :(得分:0)
使用转义字符串
$sta_dalje = mysqli_real_escape_string($con, $_POST["state_id"]);
你的情况可以简单地
Organizator='$sta_dalje'