search
HomeBackend DevelopmentPHP Tutorial 请问一上,为什么说Mysql预处理可以防止SQL注入呢?

请教一下,为什么说Mysql预处理可以防止SQL注入呢???
比如:

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
  $link = new Mysqli('localhost', 'root', '111111', 'test');
  $link -> set_charset('utf8');

  $sql = 'SELECT * FROM test WHERE id=? AND name=?';
  $stmt = $link -> prepare($sql);
  $stmt -> bind_param('is', $id, $name);
  $stmt -> execute();



就上面这个例子来说,我的理解是:
Mysql在真正执行前,就已经定死了SQL语句中“?”号所代表的类型值。
所以,如果给id位置处的“?”传字符串值,它也会转成整型,这样就防止了SQL注入。

但是,name处的“?”,本来传递的就应该是字符串,那如果要是传给它一个SQL注入的语句,还怎么防止SQL注入呢?

不知道我的理解对不对,请大家指教!谢谢!!

------解决方案--------------------
addslashes()
------解决方案--------------------
prepare预处理的实现过程其实就是内部转义的过程,将一些需要转义的字符进行转义,你是看不见的,就如同你自己封装了一个转义方法相似,如果不预处理而是直接执行,那么是没有转义这一步骤的,因此增加了危险系数
------解决方案--------------------
探讨

引用:

prepare预处理的实现过程其实就是内部转义的过程,将一些需要转义的字符进行转义,你是看不见的,就如同你自己封装了一个转义方法相似,如果不预处理而是直接执行,那么是没有转义这一步骤的,因此增加了危险系数

是像楼上是的用个addslashes(),或者mysql_escape_string()吗?

------解决方案--------------------
养成习惯,不懂的问题问php.net,实在找不到再来问论坛。

结论就是你不用addslashes,你的sql语句里的?也不用''包围,prepare全自动的'addlashes()'。
------解决方案--------------------
$v = ( is_int( $v ) ? $v : "'".pg_escape_string( $v )."'" );
LZ跟我用的是一样的 都是用?占位符方式。

? 跟值一一对应,在查询之前依次替换,这个时候 整形的 用is_int ,字符串就用 pg_escape_string()
pg_escape_string() 转义 text/char 数据类型的字符串,返回转义后的字符串。建议用此函数替代 addslashes()。(我用pgsql数据库)进行转义。

$real_sql .= preg_replace('/\?/', $v, $sql_arr[$key],1); 这是?的替换。
------解决方案--------------------
mysql_escape_string 用这个接受用户 或者自己写个过虑用户传来的值基本就可以防止sql注入了
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询Aug 26, 2022 pm 02:07 PM

本篇文章给大家带来了关于SQL的相关知识,其中主要介绍了SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询的方法,文中通过示例代码介绍的非常详细,下面一起来看一下,希望对大家有帮助。

SQL Server解析/操作Json格式字段数据的方法实例SQL Server解析/操作Json格式字段数据的方法实例Aug 29, 2022 pm 12:00 PM

本篇文章给大家带来了关于SQL server的相关知识,其中主要介绍了SQL SERVER没有自带的解析json函数,需要自建一个函数(表值函数),下面介绍关于SQL Server解析/操作Json格式字段数据的相关资料,希望对大家有帮助。

聊聊优化sql中order By语句的方法聊聊优化sql中order By语句的方法Sep 27, 2022 pm 01:45 PM

如何优化sql中的orderBy语句?下面本篇文章给大家介绍一下优化sql中orderBy语句的方法,具有很好的参考价值,希望对大家有所帮助。

Monaco Editor如何实现SQL和Java代码提示?Monaco Editor如何实现SQL和Java代码提示?May 07, 2023 pm 10:13 PM

monacoeditor创建//创建和设置值if(!this.monacoEditor){this.monacoEditor=monaco.editor.create(this._node,{value:value||code,language:language,...options});this.monacoEditor.onDidChangeModelContent(e=>{constvalue=this.monacoEditor.getValue();//使value和其值保持一致i

一文搞懂SQL中的开窗函数一文搞懂SQL中的开窗函数Sep 02, 2022 pm 04:55 PM

本篇文章给大家带来了关于SQL server的相关知识,开窗函数也叫分析函数有两类,一类是聚合开窗函数,一类是排序开窗函数,下面这篇文章主要给大家介绍了关于SQL中开窗函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下。

如何使用exp进行SQL报错注入如何使用exp进行SQL报错注入May 12, 2023 am 10:16 AM

0x01前言概述小编又在MySQL中发现了一个Double型数据溢出。当我们拿到MySQL里的函数时,小编比较感兴趣的是其中的数学函数,它们也应该包含一些数据类型来保存数值。所以小编就跑去测试看哪些函数会出现溢出错误。然后小编发现,当传递一个大于709的值时,函数exp()就会引起一个溢出错误。mysql>selectexp(709);+-----------------------+|exp(709)|+-----------------------+|8.218407461554972

springboot配置mybatis的sql执行超时时间怎么解决springboot配置mybatis的sql执行超时时间怎么解决May 15, 2023 pm 06:10 PM

当某些sql因为不知名原因堵塞时,为了不影响后台服务运行,想要给sql增加执行时间限制,超时后就抛异常,保证后台线程不会因为sql堵塞而堵塞。一、yml全局配置单数据源可以,多数据源时会失效二、java配置类配置成功抛出超时异常。importcom.alibaba.druid.pool.DruidDataSource;importcom.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;importorg.apache.

Monaco Editor怎么实现SQL和Java代码提示Monaco Editor怎么实现SQL和Java代码提示May 11, 2023 pm 05:31 PM

monacoeditor创建//创建和设置值if(!this.monacoEditor){this.monacoEditor=monaco.editor.create(this._node,{value:value||code,language:language,...options});this.monacoEditor.onDidChangeModelContent(e=>{constvalue=this.monacoEditor.getValue();//使value和其值保持一致i

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use