在我的表中我有查询:
$sql="SELECT * FROM `jom_x1_organizatori`
WHERE Organizator='".$sta_dalje."' Order by `Struka`,`Zanimanje`";
$sta_dalje
=$_POST["state_id"] 来自另一个表,值为:
- ЈУ Гимназија са техничким школама Дервента
- “ПРИМУС”Градишка
如果情况 1 有效。
如何查询?
最佳答案
首先:切勿通过将查询字符串与用户输入连接来构建查询!如果这样做,则使用库的专用函数(例如mysqli_real_escape_string
)对输入进行转义。如果不逃逸,您将打开一个潜在的安全漏洞(称为 SQL injection )。
"ПРИМУС"Градишка
不起作用,因为连接后查询将无效。现在想象一下,如果我发布以下输入,会发生什么:';删除表 jom_x1_organizatori; --
您的查询将是:
SELECT * FROM `jom_x1_organizatori`
WHERE Organizator=''; DROP TABLE jom_x1_organizatori; --' Order by `Struka`,`Zanimanje`
只要您可以使用准备好的语句来绑定(bind)参数(并让库来完成艰苦的工作),但始终转义并验证您的输入(使用准备好的语句,转义是由库完成的) !
$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
,始终列出列。它可以防止查询不必要的数据,并且您的代码将更能抵抗数据库更改,而且调试将变得更加简单。
关于php - 表中的单引号中的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26839866/