簡體   English   中英

通過php變量從MySQL選擇數據時,如何轉義單引號

[英]How can I escape single quotes when selecting data from MySQL through a php variable

我試圖從MySQL中獲取一些數據,這些數據通過Ajax中的依賴選擇包含單引號,但沒有返回任何結果。

我用了

$ mysqli-> real_escape_string

那也沒有幫助。

在我的數據庫表中,我有這樣的值:

OTUN'A',JAGUN 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();

不要在引號周圍加上引號? 參數占位符。 它不需要它們,它將始終被視為單個標量值。

不要對$_REQUEST['ward_code']進行任何轉義。 使用查詢參數時不需要它,它將始終被視為單個標量值。 因此,即使它包含文字單引號,也無法“突破”任何帶引號的字符串。

使用查詢參數比擔心是否正確轉義是更好的解決方案。 這比給自己看所有報價內的報價並想知道是否正確平衡所有報價要好得多。

查詢參數更易於編碼,並且對代碼質量和安全性更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM