php - 表中的单引号中的双引号

标签 php mysql quote

在我的表中我有查询:

$sql="SELECT * FROM `jom_x1_organizatori` 
      WHERE Organizator='".$sta_dalje."' Order by `Struka`,`Zanimanje`";

$sta_dalje=$_POST["state_id"] 来自另一个表,值为:

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

如果情况 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/

相关文章:

Javascript 单引号替换被忽略

php - Codeigniter 在日期格式的 SQL 查询中自动添加反引号 (`` )/波浪号

php - MySQL 自动生成所有可能的组合作为行

mysql - 酒店预订系统的价格规则数据库设计

regex - 如何在Notepad++中找到单引号并将其替换为两个单引号?

C++ 错误 - 缺少右引号\

php - 如何与 php 应用程序共享 session

php - 与来自 ruby​​ 的 php fastcgi 套接字通信

php - Doctrine 产生 Integrity constraint violation 1451

mysql - 如何根据日期从两个表SQL中提取数据