加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – (double)$user_input和bind_param(‘d’,$user_input)之

发布时间:2020-12-13 21:48:13 所属栏目:PHP教程 来源:网络整理
导读:让我们说我要执行这样一个准备好的声明: $qry-prepare('UPDATE table_name SET column1 = ? string_column = ? WHERE column3 = ? AND column4 = ?');$qry-bind_param('sbid',$string,$blob,$int,$double);$int = 'non int value'; /* gives 0 in the datab
让我们说我要执行这样一个准备好的声明:

$qry->prepare('UPDATE table_name SET column1 = ? string_column = ? WHERE column3 = ? AND column4 = ?');
$qry->bind_param('sbid',$string,$blob,$int,$double);

$int = 'non int value'; /* gives 0 in the database */
$blob = 'some string';
$string = 'another string';
$double = $double;

$qry->execute();
$qry->close();

我只想说我只想执行一次查询,我只是在安全名称中使用了预处理语句.从我一直在阅读的内容来看,只使用一次准备好的查询会产生更多的开销,这相当于降低了安全性方面的性能.话虽如此 – 一次这样做同样的查询会有什么性能/安全性差异.

$int = (int) $int;
$blob = "'" .mysql_real_escape_string($blob) ."'";
$string = "'" .mysql_real_escape_string($blob) ."'";    
$double = (double) $double;

$db->query("UPDATE SET column1 = $int,column2 = $blob WHERE column3 = $string AND column4 = $double ");

PS.我对Prepared语句如何改进性能以及单个查询的安全性和速度差异感兴趣.

解决方法

这有很多.一些随机点

>如果MySQL服务器存在大量连接,则单次使用预处理语句会产生(超过理论上)性能损失,这会更高. (想一想:上下文切换)
>但是你不应该运行如此接近其极限的数据库服务器,这才会产生影响.
>但你并不总是有选择(想想:共享主机)

要么:

>有一些(甚至很多)案例,其中准备好的语句不提供安全性好处 – 有很多业务逻辑,其中不涉及用户生成的数据(想想:Jointables,只携带ID)或者用户生成的数据必须事先通过其他原因进行验证(思考:价格计算,memcached查找,……)
>但是为每个查询选择多种样式之一会导致代码无法维护.
>但它有时是不可避免的(想一想:IN()构造没有准备好的查询支持)

经常被忽视:

>准备好的查询有时会使与RDBMS无关的内容变得更加困难
>但是准备好的查询提供了针对SQL注入的最佳知识保护.

我的最爱:

>通常建议只使用准备好的查询
>但是这个星球上的大多数生物会建议你吃粪便或腐烂的有机物质.

因此,风格的选择通常必须根据具体情况进行.我们采用了封装所有数据库访问的方式,包括标准化库中的参数管理,简单地是require()ed,因此您可以直接替换准备好的查询,转义或任何您想要的和您的RDBMS支持.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读