【问题标题】:mysql_real_escape_string ISSUEmysql_real_escape_string 问题
【发布时间】:2010-09-25 13:33:50
【问题描述】:

如果我输入

'

在我的搜索栏中我收到一个 mysql 错误,因为“刺痛”没有被转义——它认为。

但我无法逃脱它的原因是因为我认为它目前不是一个字符串。

搜索框在我输入时使用 ajax 动态生成搜索结果,它会找到我收到错误的结果:

    You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near '%' OR Location
LIKE '%'%' OR Map LIKE '%'%' LIMIT 0, 16' at line 2

这是mysql查询:

<?php 
    if($_POST['q']!=""){
  include $_SERVER['DOCUMENT_ROOT'] . "/include/datebasecon.php";
        $result = mysql_query("
          SELECT id, Name, Location,  Map
          FROM Accommodation WHERE Name LIKE '%".$_POST['q']."%' OR Location LIKE '%".$_POST['q']."%' OR Map LIKE '%".$_POST['q']."%' LIMIT 0, 16") 
        or die(mysql_error());
        $output = "";
        while($row = mysql_fetch_array($result)){
            $N = preg_replace("/(".$_POST['q'].")/i","<span>$1</span>",$row['Name']);
            $L = preg_replace("/(".$_POST['q'].")/i","<span>$1</span>",$row['Location']);
            $M = preg_replace("/(".$_POST['q'].")/i","<span>$1</span>",$row['Map']);
            $output .= "<p>".$N." - ".$L."</p>";    
        }

        print $output;

    }
?>

有没有我可以在它发布查询后解决这个问题?

【问题讨论】:

  • I don't think it currently is a string. 它是什么?

标签: mysql string escaping mysql-real-escape-string


【解决方案1】:

magic_quotes_gpc 关闭时(应该如此!),$_POST['q'] 只是字符串',只是一个字符。这就是它出现在您的 SQL 代码中的原因:

%' OR Location LIKE '%'%' OR Map LIKE '%'%' LIMIT 0, 16

错误发生在'%'%',因为LIKE 字符串被提前终止。

您可以在$_POST['q'] 上使用mysql_real_escape_string(),它会被转义:

$q = mysql_real_escape_string($_POST['q']);
$result = mysql_query("
  SELECT id, Name, Location,  Map
  FROM Accommodation WHERE Name LIKE '%".$q."%' OR Location LIKE '%".$q."%' OR Map LIKE '%".$q."%' LIMIT 0, 16") 
or die(mysql_error());

【讨论】:

    【解决方案2】:

    你写了“我不认为它目前是一个字符串”......它是一个字符串。您可以将其传递给mysql_real_escape_string() 并使用结果来使您的查询安全可靠。您的脚本通过$_POST$_GET$_REQUEST$_COOKIE 参数接收到的所有内容都可以用作字符串,但它是一个数组。

    【讨论】:

      【解决方案3】:

      为了让你明白。
      查看您的查询:

      LIKE '%search string%'
      

      注意您用来分隔搜索字符串的撇号。
      这些撇号确实意味着 IS 中的数据是一个字符串。
      Everything 用引号引起来的查询都是一个字符串。
      Everything你在查询中加上引号必须被转义。
      无需思考、考虑或估计。规则简单明了:引用的文本应始终进行转义。

      【讨论】:

      • 谢谢你,我对 php 还很陌生,这对你有很大帮助
      猜你喜欢
      • 1970-01-01
      • 2013-10-11
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多