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

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

原文地址:https://www.fujieace.com/php/pdo-mysqli.html

今天主要是来分享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;
}

 

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;
}

 

二、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......
 */

 

posted @ 2019-10-29 21:50  汉学  阅读(115)  评论(0编辑  收藏  举报