通过php变量从MySQL选择数据时,如何转义单引号
我试图通过Ajax中的dependent select从MySQL中获取一些包含单引号的数据,但没有返回任何结果 我曾经 $mysqli->real\u escape\u字符串 那也没用 在我的数据库表中,我有如下值:通过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_
$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,'\\\\','')???为什么数据库中有\\\\?