php小总结之 mysqli面向过程、面向对象和PDO在增删改查使用中的一些小区别

本篇介绍一下连接数据库,以及操作sql语句中的区别,其他的暂不介绍,其中需要注意的是,很多参数只介绍一种,其他的请自行百度

连接数据库

<?php

$host     = '127.0.0.1';        //ip
$user     = 'root';             //账号
$password = 'weicunbin123';     //密码
$db       = 'testguest';        //数据库名字
$type     = 'mysql';            //数据库类型
// $dsn =“数据库类型:host=数据库的域名;dbname=数据库名;”;
$dsn      = "$type:host=$host;dbname=$db;"; //data source name =>数据源名字

// myqli面向过程
$conn =mysqli_connect($host,$user,$password,$db);
if(mysqli_connect_error($conn)){                             //如果没有错误,会返回一个NULL
    die("连接失败,错误:" . mysqli_connect_error($conn));   //打印错误信息
}
// 设置字符集
mysqli_set_charset($conn,'utf8');

// mysqli面向对象
$mysqli = new mysqli($host,$user,$password,$db);
if($mysqli->connect_errno){ //连接成功errno应该为0
    die('Connect Error:'.$mysqli->connect_error);
}
$mysqli -> set_charset('utf8');

// PDO
try{
    $pdo = new PDO($dsn,$user,$password);
}catch(PDOException $e){
    die('connect error:'.$e -> getMessage());
}
$pdo->exec("set names utf8"); //设置字符集

?>

使用sql语句中的一些不同(基础)

sql语句

// 增
$add_sql = "INSERT INTO db_demo(db_name,db_password,db_date) 
                           VALUES('name','password',NOW() )";
// 删
$del_sql = "DELETE  FROM db_demo WHERE db_id = 80";
// 改
$update_sql = "UPDATE db_demo SET db_name='爱你' ,db_password='不可能' WHERE db_id = 100";
// 查
$select_sql = "SELECT * FROM db_demo ORDER BY db_date DESC";//倒叙查询

操作sql语句,mysqli面向过程

// 执行sql语句都用mysqli_query()函数
// 针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象。
// 针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE。
$conn_result = mysqli_query($conn,$add_sql);
echo '增,上一次MySQL 操作影响的行数为:'.mysqli_affected_rows($conn);
echo '增,上一次insert操作所产生的id为:'.mysqli_insert_id($conn);
echo '<br>';

$conn_result = mysqli_query($conn,$del_sql);
echo '删,上一次MySQL 操作影响的行数为:'.mysqli_affected_rows($conn);
echo '<br>';

$conn_result = mysqli_query($conn,$update_sql);
echo '改,上一次MySQL 操作影响的行数为:'.mysqli_affected_rows($conn);
echo '<br>';

$conn_result = mysqli_query($conn,$select_sql);
echo '查,总共返回的数据为数量为:'.mysqli_num_rows($conn_result);
while($list = mysqli_fetch_assoc($conn_result)){//从结果集中取得一行作为关联数组:
    print_r($list);
}
mysqli_free_result($conn_result);  // 释放结果集
echo '<br>';
 

mysqli面向对象


$mysqli_result = $mysqli -> query($add_sql);
echo '增,上一次MySQL 操作影响的行数为:'.$mysqli -> affected_rows;
echo '增,上一次insert操作所产生的id为:'.$mysqli -> insert_id;
echo '<br>';

$mysqli_result = $mysqli -> query($del_sql);
echo '删,上一次MySQL 操作影响的行数为:'.$mysqli -> affected_rows;
echo '<br>';

$mysqli_result = $mysqli -> query($update_sql);
echo '改,上一次MySQL 操作影响的行数为:'.$mysqli -> affected_rows;
echo '<br>';

$mysqli_result = $mysqli -> query($select_sql);
echo '查,总共返回的数据为数量为:'.$mysqli_result -> num_rows ;
while($list = $mysqli_result -> fetch_assoc()){
    print_r($list);
}
$mysqli_result -> free_result();// 释放结果集
echo '<br>';

PDO


// pdo有两个执行语句中的的函数,这一点需要注意区分,主要是查询语句和其他的不同
$pdo_result = $pdo -> exec($add_sql);    
// 不会从一条 SELECT 语句中返回结果。
// 在一个单独的函数调用中执行一条 SQL 语句,返回受此语句影响的行数。 
// 这一点与mysqli不同,需要注意   
echo '增,受此语句影响的行数为:'.  $pdo_result;
echo '增,上一次insert操作所产生的id为:'.$pdo -> lastInsertId();
echo '<br>';

$pdo_result =   $pdo -> exec($del_sql);
echo '删,受此语句影响的行数为:'.$pdo_result;
echo '<br>';

$pdo_result =   $pdo -> exec($update_sql);
echo '改,受此语句影响的行数为:'.$pdo_result;
echo '<br>';


$pdo_result =   $pdo -> query($select_sql);
// 如果成功,PDO::query()返回PDOStatement对象,如果失败返回 FALSE 。

// echo '查,总共返回的数据为数量为".$pdo_result->rowCount();  
//返回受 DELETE、INSERT、 或 UPDATE 语句影响的行数。
// 所以最好不用使用rowCount()获取sql语句返回的行数,正确获取查询语句返回的行数如下

$rows = $pdo_result -> fetchAll();//fetchAll()返回一个包含结果集中所有行的数组
echo '查,总共返回的数据为数量为:'.count($rows);  

foreach ($rows as  $list) {
    echo '查,第一种,数据为:'.$list['db_date'].'<br>'; 
}

while($list = $pdo_result -> fetch(PDO::FETCH_ASSOC)){  //从结果集中获取下一行,和mysqli中 -> fetch_assoc()一样
    echo '查,第二种,数据为:'.$list['db_date'].'<br>'; 
}

// 有一点需要注意,fetch和fetchall不能同时存在,不然会之触发一个

echo '<br>';
posted @ 2022-04-02 09:47  coderwcb  阅读(2)  评论(0编辑  收藏  举报