使用mysli防止sql注入

自从 php5 推出 mysqli 后就开始不提倡使用 mysql_ 开头的接口了,现在使用 mysql_connet 通常调试的时候会报警告说这个不该用

mysqli 使用起来其实更简单

    $url = "localhost";  
    $usr = "root";  
    $paw = "123";  
    $database = "mdb";  
      
    //$link = 0;  
    $link = mysqli_connect($url,$usr,$paw,$database)   
        or die("Error " . mysqli_error($link));  
    $query = "SELECT gitid,cid from carts where uid = $uid ";  
    $result = $link->query($query);  
    while($row=mysqli_fetch_array($result)){  
    //do you action  
    }  

PDO其实也是不错的选择,mysqli自然更方便

官网其实已经说明了:http://php.net/manual/en/mysqlinfo.api.choosing.php

下面讲讲如何在服务器端防注入(当然用JS检查表单也很常用)。

SQL注入很容易理解,例如获取表单数据

    $stmt = $mysqli->prepare("INSERT INTO table_name (name) VALUES (?)");  
    $stmt->bind_param('s', $postedName);  
      
    //只要确保参数在下一步 execute 之前赋值就行了  
    $stmt->execute();  

 很简单, 在 prepare 函数里面把参数用 ‘?’ 来替代,然后使用 bind_param 绑定参数。在 bind_param 中,第一个参数 's' 代表了参数的类型与个数(此处为一个字符串类型)。如官方的例子

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");  
$stmt->bind_param('sssd', $code, $language, $official, $percent); 

 就是绑定了四个参数,三个为字符串,一个为数字。非常简便。

这样一来就不用怕一个参数被恶意扩展为一个语句来捣乱了。


注:本文由王智磊(王大宝儿)整理编写,也参考借鉴了很多大神的笔记,分享代码,分享成功,欢迎各位交流和转载,转载请注明出处(博客园:王大宝儿)http://www.cnblogs.com/wangzhilei/

原文地址:https://www.cnblogs.com/wangzhilei/p/6970292.html