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