php非法字符内容转义,在PHP中,当向数据库提交字符串时,我应该使用htmlSpecialchars()处理非法字符...

数据库中没有“非法”字符。不能存储某些字符的数据库是一派胡言。有一些服务字符,如引号,用于分隔字符串。这些角色应该只是转义,而不是被删除。

要向数据库发送查询,您有两个选项:构建一个通常的查询方式,使其看起来与SQL控制台中运行的SQL查询完全一样。

要做到这一点,一个人应该明白一整套规则,而不仅仅是“使用MySQL_REAL_EXECH_String”。

规则,如:字符串应该用引号和转义来括起来。这是转义的唯一含义:它只是逃避分隔符!(以及其他一些字符-字符串终止字符和转义字符本身)。没有周围的引号,MySQL_REAL_EXECH_String就没用了。

数字应该显式地转换为它的类型。虽然数据数字可以像字符串一样受到威胁,但也有一些数字,比如限制子句参数,它们不能转义,只能进行强制转换。

发送查询和数据分别.

这是最可取的方式,因为它可以缩短为只是“使用绑定”。所有字符串、数字和限制参数都可以绑定-完全不用担心。

使用此方法,您的查询将占位符按原样发送到数据库,绑定数据以单独的数据包发送,因此不会发生干扰。就像电码和数据分离。将程序(查询本身)与数据分开发送。

但!

上面提到的所有内容都只涉及查询的数据部分。

但有时我们必须使查询更加动态,添加运算符或标识符。

在这种情况下,每个动态参数都应该在脚本中进行硬编码,并从该集合中选择。

例如,要执行动态排序:$orders  = array("name","price","qty"); //field names$key     = array_search($_GET['sort'],$orders));

// see if we have such a name$orderby = $orders[$key];

//if not, first one will be set automatically. smart enuf :)$query   = "SELECT * FROM `table` ORDER BY $orderby";

//value is safe

或动态搜索:$w     = array();$where = '';if (!empty($_GET['rooms']))

$w[]="rooms='".mesc($_GET['rooms'])."'";if (!empty($_GET['space']))

$w[]="space='".mesc($_GET['space'])."'";if (!empty($_GET['max_price']))

$w[]="price 

在本例中,我们只向查询中添加由用户输入的数据,而不是字段名,这些数据都是在脚本中硬编码的。对于绑定,算法将非常相似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值