PHP连接数据库MySQL代码:Mysqli与PDO防注入

今天主要是来分享PHP编程语言如何用PDO和Mysqli连接数据库?以及增、删、改、查。关于现在为什么都流行用PDO与Mysqli?这里我就不多讲了,主要是防止SQL注入、不同数据库类型的兼容性。具体操作如下:

 

一、Mysqli

主要讲的是Mysqli的增、删、改、查,这里所讲的增、删、改、查语句都是防注入的。可能有很多人的SQL语句只有查询是防注入的,其它并没有做任何的防注入。因为有时候网站的功能是允许“注册用户”做增、删、改、查的,不做防注入是不行的。

 

1、Mysqli 连接数据库

<?php
$serveraddress='localhost';  //服务器地址
$user='root';  //用户名
$password='root'; //密码
$database='fujieace'; //数据库
$mysqli  = new  mysqli ( $serveraddress ,  $user ,  $password ,  $database );
if ( mysqli_connect_errno ()) {
    printf ( "Connect failed: %s\n" ,  mysqli_connect_error ());
    exit();
}
$mysqli->set_charset( "utf8" ); // 设置字符集

 

2、Mysqli 插入(增加)数据

$catname='www.fujieace.com';
$parentid=12;

//mysqli插入
$sql='insert into cat (cat_name,parent_id) values(?,?)';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('si',$catname,$parentid );
/*
i  整型integer
d  双精度浮点型double
s  字符串string
b  是一个blob和将发送数据包
*/
$stmt->execute();
if($id=$stmt->insert_id){
    echo $id; //得到插入返回的ID
}

 

3、Mysqli 修改数据

$catname='https://www.fujieace.com';
$catid=66;

//mysqli修改
$sql='update cat set cat_name=? where cat_id=?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('si',$catname,$catid );
if($stmt->execute()){
    echo '修改成功!';
}

 

4、Mysqli 删除数据

$catid=68;

//mysqli删除
$sql='delete from cat where cat_id=?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$catid );
if($stmt->execute()){
    echo '删除成功!!';
}

 

5、Mysqli 查询一条数据

$catid=12;

//mysqli查询一行
$sql='select cat_name,parent_id from cat where cat_id=?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$catid );
$stmt->execute();
$stmt -> bind_result ( $name ,  $code );
while ( $stmt -> fetch ()) {
    echo $name.'=>'.$code;
}

 

注意:

如果你想把这一条数据返回前端,你的部份代码修改如下:

 ......
 $arr=[];
        while ($stmt->fetch()) {
            $arr['name'] = $name;
            $arr['code'] = $code;
        }
return $arr;

 

6、Mysqli 查询多条数据

$catid=10;

//mysqli查询多行
$sql='select cat_name,parent_id from cat where cat_id<?';
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('i',$catid );
$stmt->execute();
$stmt -> bind_result ( $name ,  $code );//这里参数跟你查询的字段显示个数需要对应起来!
while ( $stmt -> fetch ()) {
    echo $name.'=>'.$code;
}

 

注意:

如果你想把这多条数据返回前端,你的部份代码修改如下:

$arr =[];
$arr2 =[];
        while ( $stmt -> fetch ()) {
            $arr['name'] = $name;
            $arr['code'] = $code;
            $arr2[] = $arr;
        }
        /*这里循环得到一个二维数组*/
return $arr2;

效果类似如下:

array(8) {
  [0]=>
  array(2) {
    ["type"]=>
    string(8) "category"
    ["action"]=>
    string(10) "["select"]"
  }
  [1]=>
  array(2) {
    ["type"]=>
    string(7) "article"
    ["action"]=>
    string(10) "["select"]"
  }
  [2]=>
  array(2) {
    ["type"]=>
    string(4) "user"
    ["action"]=>
    string(10) "["select"]"
  }
  [3]=>
  array(2) {
    ["type"]=>
    string(7) "comment"
    ["action"]=>
    string(10) "["select"]"
  }
  [4]=>
  array(2) {
    ["type"]=>
    string(3) "tag"
    ["action"]=>
    string(10) "["select"]"
  }
  [5]=>
  array(2) {
    ["type"]=>
    string(5) "image"
    ["action"]=>
    string(10) "["select"]"
  }
  [6]=>
  array(2) {
    ["type"]=>
    string(16) "usergrouppurview"
    ["action"]=>
    string(10) "["select"]"
  }
  [7]=>
  array(2) {
    ["type"]=>
    string(9) "usergroup"
    ["action"]=>
    string(10) "["select"]"
  }
}

 

或者:

用以下这种方法也可以查询多条数据,返回前端,得到的还是一维数组。

 $arr = [];
        while ($stmt->fetch()) {
            $arr["$type"] = $action;
        }
        return $arr;

效果如下:

array(8) {
  ["category"]=>
  string(10) "["select"]"
  ["article"]=>
  string(10) "["select"]"
  ["user"]=>
  string(10) "["select"]"
  ["comment"]=>
  string(10) "["select"]"
  ["tag"]=>
  string(10) "["select"]"
  ["image"]=>
  string(10) "["select"]"
  ["usergrouppurview"]=>
  string(10) "["select"]"
  ["usergroup"]=>
  string(10) "["select"]"
}

 

二、PDO

这里我就不多讲了,作用及原理同上。主要是讲关于:PDO连接数据库以及相应的增、删、改、查。

用PDO你只需要记住以下个步骤保证你不会出错:

1:连接数据库

2:设置字符集

3:准备SQL语句

4:替换SQL语句

5:发送SQL语句

6:得到SQL结果,可以是值,可以是布尔型,也可以是对象,数组等;

 

1、PDO 连接数据库

<?php
$dsn  =  'mysql:dbname=fujieace;host=localhost' ;//数据库类型,数据库,主机名
$user  =  'root' ;//用户名
$password  =  'root' ; //密码
$conn  = new  PDO ( $dsn ,  $user ,  $password );
$conn->exec("set names utf8"); //设置字符集

 

2、PDO 插入(增加)数据

$catname='www.fujieace.com';
$parentid=66;
$sql='insert into cat (cat_name,parent_id) values(:catname,:parentid)';

//PDO插入方法一
$sth=$conn->prepare($sql,array( PDO :: ATTR_CURSOR  =>  PDO :: CURSOR_FWDONLY));
$sth->execute(array(':catname'=>$catname,':parentid'=>$parentid));
if($id=$conn->lastInsertId()){
    echo $id; //得到插入返回的ID
}

//PDO插入方法二
$sth=$conn->prepare($sql);
$sth -> bindParam ( ':catname' ,  $catname ,  PDO :: PARAM_STR );
$sth -> bindParam ( ':parentid' , $parentid ,  PDO :: PARAM_INT ,  12 );//参数标识,绑定的变量名,参数类型(选填),数据类型长度(选填)
$sth -> execute ();
if($id=$conn->lastInsertId()){
    echo $id; //得到插入返回的ID
}

 

3、PDO 修改数据

$catname='付杰';
$catid=88;

//PDO修改
$sql='update cat set cat_name=? where cat_id=?';
$sth=$conn->prepare($sql);
$sth->bindParam(1, $catname);
$sth->bindParam(2,$catid);
if($sth->execute()){
    echo '修改成功!';
}

 

4、PDO 删除数据

$catid=91;

//PDO删除
$sql='delete from cat where cat_id=:catid';
$sth=$conn->prepare($sql);
$sth->bindValue(':catid',$catid,PDO::PARAM_INT);
if($sth->execute()){
    echo '删除成功!';
}

 

5、PDO 查询数据(一条或多条)

$catid=10;
//PDO查询多行
$sql='select cat_name,parent_id from cat where cat_id<?';
$sth=$conn->prepare($sql);
$sth->bindParam(1,$catid);
$sth->execute();
$result=$sth->fetchAll();
//var_dump($result);
foreach ($result as $k => $v){
    echo $v['cat_name'].'=>'.$v['parent_id'];
}

$catid=12;
//PDO查询一行
$sql='select cat_name,parent_id from cat where cat_id=:catid';
$sth=$conn->prepare($sql);
$sth->bindParam(':catid',$catid);
$sth->execute();
$result=$sth->fetch(PDO::FETCH_ASSOC);
var_dump($result);
/*
 FETCH_ASSOC、FETCH_BOTH、FETCH_BOUND、FETCH_CLASS、FETCH_COLUMN、FETCH_FUNC、GROUP、INTO、KEY_PAIR、LAZY、NAMED、NUM、OBJ、ORI_ABS......
 */
    A+
发布日期:2019年01月08日 21:16:32  所属分类:PHP
最后更新时间:2020-11-24 12:49:52
付杰
  • ¥ 69.0元
  • 市场价:69.0元
  • ¥ 199.0元
  • 市场价:399.0元
  • ¥ 298.0元
  • 市场价:398.0元
  • ¥ 59.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  0   博主  0

  1. 头像 青春阳光 0

    博客不错,我也是PHPer,学习了