通过php变量从MySQL选择数据时,如何转义单引号

通过php变量从MySQL选择数据时,如何转义单引号,php,mysql,Php,Mysql,我试图通过Ajax中的dependent select从MySQL中获取一些包含单引号的数据,但没有返回任何结果 我曾经 $mysqli->real\u escape\u字符串 那也没用 在我的数据库表中,我有如下值: $sql = "SELECT pu_name, CONCAT(pu_code,' - ',pu_name) pu_name FROM polling_unit WHERE REPLACE(pu_ward_name,'\\\\','') = ? AND pu_

我试图通过Ajax中的dependent select从MySQL中获取一些包含单引号的数据,但没有返回任何结果

我曾经

$mysqli->real\u escape\u字符串

那也没用

在我的数据库表中,我有如下值:

$sql = "SELECT pu_name, CONCAT(pu_code,' - ',pu_name) pu_name 
  FROM polling_unit 
  WHERE REPLACE(pu_ward_name,'\\\\','') = ? 
    AND pu_name NOT IN (SELECT pu_name FROM post_election_info) 
  ORDER BY CAST(pu_code AS UNSIGNED)";

$stmt = $mysqli->prepare($sql);

$stmt->bind_param("s", $_REQUEST['ward_code']);

$stmt->execute();
奥顿A,贾根B。使用依赖选择菜单,我需要获取每个菜单下的位置

我的问题是:

$ward_code = $mysqli->real_escape_string($_REQUEST['ward_code']);
    $sql = "select pu_name, concat(pu_code,' - ',pu_name) pu_name from polling_unit where REPLACE(pu_ward_name,'\\\\','')='".$ward_code."' 
     AND pu_name NOT IN (SELECT pu_name FROM post_election_info ) order by CAST(pu_code AS UNSIGNED)";

正如Nigel Ren在上面所评论的,您应该学会使用查询参数

大概是这样的:

$sql = "SELECT pu_name, CONCAT(pu_code,' - ',pu_name) pu_name 
  FROM polling_unit 
  WHERE REPLACE(pu_ward_name,'\\\\','') = ? 
    AND pu_name NOT IN (SELECT pu_name FROM post_election_info) 
  ORDER BY CAST(pu_code AS UNSIGNED)";

$stmt = $mysqli->prepare($sql);

$stmt->bind_param("s", $_REQUEST['ward_code']);

$stmt->execute();
不要在
参数占位符周围加引号。它不需要它们,它将始终被视为单个标量值

不要对
$\u请求['ward\u code']
执行任何转义。使用查询参数时不需要它,它将始终被视为单个标量值。所以它不能“中断”任何带引号的字符串,即使它包含一个文字单引号

使用查询参数比担心转义是否正确更好。这总比让自己眼睛疲劳,看着引号中的所有引号,想知道你是否正确地平衡了它们要好


查询参数更容易编码,并且对代码质量和安全性更安全

请使用预先准备好的语句和绑定变量,这将解决您的问题和其他一些问题。这是关于替换(pu_ward_name,'\\\\','')???为什么数据库中有\\\\?