今天主要是来分享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......
*/
2019年03月31日 00:28:46 沙发
博客不错,我也是PHPer,学习了
2019年03月31日 11:46:56 1层
@青春阳光 大家可以相互学习!