<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="分析PHP中如何防止SQL注入及PDO的防治方法" id="card1">
<p> 游客</p><p>
标题:分析PHP中如何防止SQL注入及PDO的防治方法<br/>
正文:<br/>
一、问题描述：　　如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句，那么应用将很可能遭受到SQL注入攻击，正如下面的例子：代码如下:$unsafe_variable = $_POST['user_input'];    mysql_query(&amp;quot;INSERT INTO `table` (`column`) VALUES ('&amp;quot; . $unsafe_variable . &amp;quot;')&amp;quot;);因为用户的输入可能是这样的：代码如下:value'); DROP TABLE table;--那么SQL查询将变成如下：代码如下:INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')对此应该采取哪些有效的方法来防止SQL注入？二、解决方法分析：使用预处理语句和参数化查询。预处理语句和参数分别发送到数据库服务器进行解析，参数将会被当作普通字符处理。这种方式使得攻击者无法注入恶意的SQL。 你有两种选择来实现该方法：1、使用PDO：代码如下:$stmt = $pdo-&amp;gt;prepare('SELECT * FROM employees WHERE name = :name');   $stmt-&amp;gt;execute(array('name' =&amp;gt; $name));   foreach ($stmt as $row) {     // do something with $row }2、使用mysqli：代码如下:$stmt = $dbConnection-&amp;gt;prepare('SELECT * FROM employees WHERE name = ?'); $stmt-&amp;gt;bind_param('s', $name);   $stmt-&amp;gt;execute();   $result = $stmt-&amp;gt;get_result(); while ($row = $result-&amp;gt;fetch_assoc()) {     // do something with $row }三、PDO　　注意，在默认情况使用PDO并没有让<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1984&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1984&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1984&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1984&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1984&amp;Page=3">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1984">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1984">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>