表中单引号的双引号

时间:2014-11-10 08:49:27

标签: php mysql quote

在我的表中,我有查询:

$sql="SELECT * FROM `jom_x1_organizatori` 
      WHERE Organizator='".$sta_dalje."' Order by `Struka`,`Zanimanje`";
来自另一个表的

$sta_dalje = $ _ POST [“state_id”],值为:

  1. ЈУГимназијасатехничкимшколамаДервента
  2. “ПРИМУС”Градишка
  3. 案例1工作。

    如何进行查询?

2 个答案:

答案 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'