php第8节MySQLi与PDO操作数据库

网站建设 Kongli 5个月前 (05-09) 186次浏览 0个评论

Mysqli与pdo操作数据库,同上一节一样,首先把要连接数据库,接着就是连接数据库,准备SQL语句,执行SQL语句,最后再关闭SQL连接

使用 requir ‘mysql_connect.php’; 引入公共的数据库连接,

 

INSERT 插入数据
插入数据,使用 ? 当作点位符,主要为了防止sql注入
$sql = “INSERT INTO `article` SET `article_id`=?;”;

//创建一个sql语句预处理对象
$stmt = $mysqli->prepare($sql);

//将有占位符的语句进去绑定
$title='这是一个连接数据库的操作';
$content='我是新增的内容111';
$click=23;
$stmt->bind_param('ssi',$title,$content,$click);

//执行sql,并判断是否执行成功
if($stmt->execute()){
//判断是否返回受影响的行数,如果有,则说明操作成功
if($stmt->affected_rows>0){
echo '成功插入了【'.$stmt->affected_rows.'】条记录,id是:'.$stmt->insert_id;
}else{
echo '没有新增记录';
}
}else{
die($mysqli->errno.':'.$mysqli->error);
}
//注销 stmt对象
$stmt->close();
//关闭连接
$mysqli->close();

UPDATE 更新数据
核心部分跟新增一样,只是变了sql语句

//创建语句
$sql = "UPDATE `article` SET `article_click`=? WHERE `article_id`=?;";

//创建预处理对象
$stmt = $mysqli->prepare($sql);

//将有占位符的语句进去绑定
$click=5000;
$id=11;
$stmt->bind_param('ii',$click,$id);
//执行sql,并判断是否执行成功
if($stmt->execute()){
//判断是否返回受影响的行数,如果有,则说明操作成功
if($stmt->affected_rows>0){
echo '成功更新了【'.$stmt->affected_rows.'】条记录','
';
}else{
echo '没有更新记录','
';
}
}else{
die($mysqli->errno.':'.$mysqli->error);
}

DELETE 删除数据

//创建语句
$sql = "DELETE FROM `article` WHERE `article_id`=?;";

//创建预处理对象
$stmt = $mysqli->prepare($sql);

//将有占位符的语句进去绑定
$id=10;
$stmt->bind_param('i',$id);
//执行sql,并判断是否执行成功
if($stmt->execute()){
//判断是否返回受影响的行数,如果有,则说明操作成功
if($stmt->affected_rows>0){
echo '成功删除了【'.$stmt->affected_rows.'】条记录','
';
}else{
echo '没有符合删除的记录','
';
}
}else{
die($mysqli->errno.':'.$mysqli->error);
}

SELECT 查询数据

<?php //引入数据连接 require 'mysql_connect.php'; //构建sql语句 $sql = "SELECT `article_id`,`article_title`,`article_content`,`article_click` FROM `article` WHERE `article_click` > ?;";
//创建预处理对象,并判断是否正确的sql
if($stmt = $mysqli->prepare($sql)){
//如果sql正确,则开始绑定变量并赋值
$stmt->bind_param('i',$click);
$click=25;

//判断是否执行成功
if($stmt->execute()){
//将获取到的结果集放到缓冲区
$stmt->store_result();
//将获取到的数据绑定到相对应的变量中
$stmt->bind_result($article_id,$article_title,$article_content,$article_click);
//判断结果集是否为空,不为空则遍历
if($stmt->num_rows>0){
//fetch() 每次获取一条记录,指针就会向下移一位,跟list()相似
while ($stmt->fetch()){
echo '

'.'文章id:'.$article_id.'---文章标题:'.$article_title.'---文章内容:'.$article_content.'---点击量:'.$article_click.'

';
}
//释放结果集
$stmt->free_result();
}else{
exit('

未能找到合适内容!

');
}
}else{
exit('查询失败!'.$mysqli->errno . ':' . $mysqli->error);
}
}else{
exit('语句错误!'.$mysqli->errno . ':' . $mysqli->error);
}
//注销 stmt对象
$stmt->close();
//关闭连接
$mysqli->close();

PDO数据库操作
PDO是php操作所有数据库的抽象层,提供了一个统一的访问接口。

它位于php跟所有数据库的中间层,只要按pdo的统一对外访问接口,那么它可以轻易的访问操作各种数据库。

pdo 数据库连接:

<?php
header("Content-Type: text/html;charset=utf-8");
//定义数据库连接源
$dsn='mysql:host=127.0.0.1;dbname=php';
//数据库登录名
$db_user='root';
//数据库密码
$db_pass='root';


//实例化 pdo 类,创建pdo对象,并完成数据库的连接,使用
try{
    $pdo = new PDO($dsn,$db_user,$db_pass);
//    echo '
<h2>连接成功</h2>

';
}catch (PDOException $e){
    die('连接错误!:'.$e->getMessage());
}

pdo 新增操作

<?php header("Content-Type: text/html;charset=utf-8"); //1.引入pdo数据库连接 require 'conn.php'; //2.创建预处理对象,并初始化sql语句 $stmt = $pdo->prepare('INSERT IGNORE `user` SET `user_name`= :user,`user_mail`= :mail,`user_pass`= sha1(:pass)');


//3.绑定参数并执行sql,(注意:这里写的数组key必须是占位符,不然会插入失败!)
$stmt->execute([':user'=>'聂风',':mail'=>'niefeng@qq.com',':pass'=>'123']);
echo '
<h3>成功添加了'.$stmt->rowCount().'条记录</h3>

';


//4.关闭预处理
$stmt=null;
//5.关闭连接
unset($pdo);

pdo 修改操作

<?php header("Content-Type: text/html;charset=utf-8"); //1.引入pdo数据库连接 require 'conn.php'; //2.创建预处理对象,并初始化sql语句 $stmt = $pdo->prepare('UPDATE `user` SET `user_mail`= :mail WHERE `user_id`=:id');


//3.绑定参数并执行sql,(注意:这里写的数组key必须是占位符,不然会插入失败!)
if($stmt->execute([':mail'=>'root@qq.com',':id'=>17])){
    echo '
<h3>成功更新了'.$stmt->rowCount().'条记录</h3>

';
}else{
    echo '
<h3>更新失败:'.$stmt->errorInfo().'</h3>

';
    exit();
}
//4.关闭预处理
$stmt=null;
//5.关闭连接
unset($pdo);

pdo 删除操作

<?php header("Content-Type: text/html;charset=utf-8"); //1.引入pdo数据库连接 require 'conn.php'; //2.创建预处理对象,并初始化sql语句 $stmt = $pdo->prepare('DELETE FROM `user` WHERE `user_id`=:id');


//3.绑定参数并执行sql,(注意:这里写的数组key必须是占位符,不然会插入失败!)
if($stmt->execute([':id'=>17])){
    echo '
<h3>成功删除了'.$stmt->rowCount().'条记录</h3>

';
}else{
    echo '
<h3>删除失败:'.$stmt->errorInfo().'</h3>

';
    exit();
}
//4.关闭预处理
$stmt=null;
//5.关闭连接
unset($pdo);

pdo 查询操作

<?php header("Content-Type: text/html;charset=utf-8"); //1.引入pdo数据库连接 require 'conn.php'; //示例1 查询指定记录数 //2.创建预处理对象,并初始化sql语句 $stmt = $pdo->prepare('SELECT `user_name`,`user_mail` FROM `user`;');


//3.判断是否执行成功,成功则遍历读出数据
if($stmt->execute()) {
    //方式1
    //PDO::FETCH_ASSOC 是获取模式,默认取的数据是带索引的,而我们现在不需要,则传入这个值进行过滤
    //$stmt->fetch() 每取一条记录指针就往下移,所以使用循环可以读取所有数据
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo var_export($row) . '
';
    }


    //方式2 将结果集中的列绑定到变量上
    $stmt->bindColumn('user_name',$name);
    $stmt->bindColumn('user_mail',$mail);
    //遍历输出,PDO::FETCH_BOUND 为绑定模式,可有可无
    while ($stmt->fetch(PDO::FETCH_BOUND)){
        echo '姓名是:',$name,'    邮箱是:',$mail,'';
    }
}


//示例2 查询指定的用户名是否存在
$stmt= $pdo->prepare('SELECT `user_id` FROM `user` WHERE `user_mail`=:mail AND `user_pass`=sha1(:pass);');
$stmt->execute([':mail'=>'hsl@qq.com',':pass'=>'123456']);


//使用 $stmt->fetchColumn 判断第一行第一列是否存在,存在则说明正确
if($stmt->fetchColumn(0)){
    echo '用户名存在'.$stmt->fetchColumn(0);
}else{
    echo '用户名不存在';
}


//4.关闭预处理
$stmt=null;
//5.关闭连接
unset($pdo);

 


行者信息 , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:php第8节MySQLi与PDO操作数据库
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址