实验室

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在服务器端清洁客户端数据是每个程序员经常要做的工作,虽然我们通常会在客户端添加 Javascript 验证,但是,恶意用户很容易自己构造 FORM 提交数据以绕过客户端验证,另外,在客户端禁用 Javascript 时验证同样不能起到作用。因此,服务器端清洁数据必不可少,本文介绍的是用 mysql_real_escape_string 清洁数据的方法,经过清洁的数据可以直接插入到数据库中。

 

由于 mysql_real_escape_string 需要 MySQL 数据库连接,因此,在调用 mysql_real_escape_string 之前,必须连接上 MySQL 数据库。



PHP:

1 <?php 
2 // 说明:用 array_map() 调用 mysql_real_escape_string 清理数组 
3 // 整理:http://www.codebit.cn 
4 function mysqlClean($data
5 
6     return (is_array($data))?array_map('mysqlClean', $data):mysql_real_escape_string($data); 
7 
8 ?>


调用方法
PHP:

1 <?php 
2 $conn = mysql_connect('localhost', 'user', 'pass'); 
3  
4  
5 $_POST = mysqlClean($_POST); 
6 ?>

 

经过清洁的数据可以直接插入数据库。

注意!mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:

mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
 
 
由于 mysql_real_escape_string 需要 MySQL 数据库连接,因此,在调用 mysql_real_escape_string 之前,必须连接上 MySQL 数据库。



在知道数据类型为字符串时,我们可以在清洁数据的同时限制字符串长度。此方法来自 David Lane, Hugh E. Williams《Web Database Application with PHP and MySQL 》(O'Reilly, May 2004)

PHP:

 1 <?php 
 2 // 说明:用 mysql_real_escape_string 清洁并限制字符长度 
 3 // 整理:http://www.codebit.cn 
 4 function mysqlClean($array, $index, $maxlength
 5 
 6     if (isset($array[$index])) 
 7     { 
 8         $input = substr($array["{$index}"], 0, $maxlength); 
 9         $input = mysql_real_escape_string($input); 
10         return ($input); 
11     } 
12     return NULL
13 
14 ?>


调用方法:
PHP:

1 <?php 
2 $conn = mysql_connect('localhost', 'user', 'pass'); 
3  
4 if(isset($_POST['username'])) 
5 
6     $_POST['username'= mysqlClean($_POST, 'username', 20); 
7     echo $_POST['username']; 
8 
9 ?>


将 $_POST 数组中的 'username' 清洁并截取前20位字符。

posted on 2009-05-12 17:23  实验室  阅读(859)  评论(0)    收藏  举报