如何使用mysql_real_escape_string函数?

4

The code here is still incomplete because I'm still going to ask you guys on what the proper format/syntax of using mysql escape string. Im still a beginner in php and I want to learn how to avoid sql injections. Is the code below correct?

$con = mysql_connect("localhost","root","mypwd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("Hospital", $con);




      $sqlque="INSERT INTO t2 (HOSPNUM, ROOMNUM, ADATE, ADTIME, LASTNAME, FIRSTNAME, MIDNAME, CSTAT, AGE, BDAY, ADDRESS, TELNUM, SEX, STAT, STAT2, STAT3, STAT4, STAT5, STAT6, STAT7, STAT8, NURSE)
      VALUES ('$_POST[hnum]', '$_POST[rnum]', '$_POST[adate]', '$_POST[adtime]', '$_POST[lname]',  '$_POST[fname]', '$_POST[mname]', '$_POST[cs]', '$_POST[age]', '$_POST[bday]', '$_POST[ad]', '$_POST[telnum]', '$_POST[sex]', '$_POST[stats1]', '$_POST[stats2]', '$_POST[stats3]', '$_POST[stats4]', '$_POST[stats5]', '$_POST[stats6]', '$_POST[stats7]', '$_POST[stats8]', '$_POST[nurse]')"; 

         mysql_real_escape_string($_POST[hnum]),
            mysql_real_escape_string($_POST[rnum]);
  mysql_real_escape_string($_POST[adate]);


4
建议不要在问题中输入您的真实密码。 - Haim Evgi
好的...做一点研究不会有什么麻烦,这是非常基础的东西,你可以直接在php.net上搜索它,不要因为每周经常出现的问题而过度。我相信这不是Stackoverflow的初衷。 - useless
@useless 承认这不是最令人兴奋的问题之一,但它是有效的并且提问得相当好。没有人说问题必须很难才值得在这里提问。不要贬低新手,你也曾经是一个新手。 :) - deceze
但愿不久的将来,我们会达到这样的状态:所有涉及mysql_real_escape_string问题的提问都足够相似,不再被视为完全重复的问题。 =] - VolkerK
4
有时候我看到一些我认为很愚蠢的问题在SO上得到了详尽、写得很好、富有信息性的答案,从中我学到了一些东西,这让我很欣赏那些提问者。这里真正伟大的不是问题的质量,而是回答者的素质。 - JAL
3个回答

8

在将值放入查询之前,您需要对其进行转义:

$hnum = mysql_real_escape_string($_POST['hnum']);
$query = "INSERT ... VALUES('$hnum')";

如果您有很多值,您可以对它们进行循环:
$values = $_POST;

foreach ($values as &$value) {
    $value = mysql_real_escape_string($value);
}

$query = "INSERT ... VALUES('$values[hnum]')";

这会阻止 SQL 注入吗?对于所有数据类型都有效吗? - user225269
是的,这就是 mysql_real_escape_string 应该做的事情,而且它似乎工作得足够好。 :) - deceze
1
在PHP 5.5中,扩展程序mysql已经被弃用,您应该使用mysqli代替。 请参阅:http://php.net/manual/en/function.mysql-real-escape-string.php - Laila

1

你在将变量插入字符串后才运行mysql_real_escape_string函数!

你应该这样做:

   $hnum = mysql_real_escape_string($_POST[hnum]),
   $rnum = mysql_real_escape_string($_POST[rnum]);
   $adate = mysql_real_escape_string($_POST[adate]);
   $sqlque="INSERT INTO t2 (HOSPNUM, ROOMNUM, ADATE, ADTIME, LASTNAME, FIRSTNAME, MIDNAME, CSTAT, AGE, BDAY, ADDRESS, TELNUM, SEX, STAT, STAT2, STAT3, STAT4, STAT5, STAT6, STAT7, STAT8, NURSE)
  VALUES ($hnum,$rnum,$adate', //etc. 

更好的方法是根本不要使用字符串替换来创建SQL查询。我建议使用PDO和准备好的语句/参数化查询。准备好的语句会为您处理输入的转义。这里有一个很好的链接,介绍了如何使用PDO而不是mysql_*命令。

0
你需要像这样使用这个函数。
....VALUES (".mysql_real_escape_string('$_POST[hnum]').",...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接