zoukankan      html  css  js  c++  java
  • 使用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/

  • 相关阅读:
    RabbitMQ
    Java 多线程
    Java 多线程
    Java 多线程
    Java 多线程
    Springboot
    SpringBoot
    SpringCloud Config
    Financial
    Hystrix
  • 原文地址:https://www.cnblogs.com/wangzhilei/p/6970292.html
Copyright © 2011-2022 走看看