【二十】mysqli基于面向过程与面向对象的编程
面向过程的方式
musqli扩展库操作mysql数据库步骤:
1.获取连接并选择数据库
//语法 mysqli_connect(host,username,password,dbname,port,socket);
$conn=mysqli_connect("127.0.0.1",'root','','user');
if (!$conn) {
die("链接失败");
}
2.设置操作编码
// 语法:mysqli_set_charset(connection,charset);
// 修改数据库连接字符集为 utf8
mysqli_set_charset($conn,"utf-8") ;
3.发送sql指令(分为ddl语句和dml语句、dql语句、dtl语句)
- ddl语句:数据定义语句
- dml语句:数据操作语句(update’、insert、delete)
- dql语句:(select)
- dtl语句:数据事务语句(rollback、commit)
查询数据(dml语句):返回的是一个结果集
//查询语句
$sql="select * from user1";
//执行sql语句
$res=mysqli_query($conn,$sql);
//\打印返回结果为一个结果集
var_dump($res);
结果集:object(mysqli_result)#2 (5) {
// ["current_field"]=> int(0)
// ["field_count"]=> int(5)
//["lengths"]=> NULL
//["num_rows"]=>int(6)
//["type"]=> int(0)
//}
echo "<br/>";
echo "----".$res->num_rows;
//取结果集的数据
while ($obj = mysqli_fetch_object($res)) {
var_dump($obj);
foreach ($obj as $key => $value) {
echo "$key------$value";
echo "<br/>";
}
echo "<br/>";
}
| 函数名 | 说明 |
|---|---|
| mysqli_fetch_assoc($result) | 查询到的一条数据以关联数组形式返回 [key]=>value |
| mysqli_fetch_row($result) 依次取出$res结果集的下一行数据 | 查询到的一条数据以索引数组形式返回 [0]=>value |
| mysqli_fetch_array($result) | 查询到的一条数据以索引数组和关联数组的混合形式返回[key]=>valuec/[0]=>value |
| mysqli_fetch_object($result) | 查询到的一条数据以对象属性的形式返回 object{[key]=>value} |
| mysqli_fetch_array($result) | 查询到的一条数据以索引数组和关联数组的混合形式返回 |
| mysqli_fetch_array($result,MYSQLI_BOTH) | 查询到的一条数据以索引数组和关联数组的混合形式返回 |
| mysqli_fetch_array($result,MYSQLI_ASSOC) | 查询到的一条数据以关联数组的混合形式返回 |
| mysqli_fetch_array($result,MYSQLI_ROW) | 查询到的一条数据以索引数组的混合形式返回 |
增删改(dml语句):返回的是一个布尔值
$sql="INSERT INTO user1(name,password,email,age)VALUES ('haha',MD5('123456'),'test@qq.com',16);";
$res=mysqli_query($conn,$sql) or die("执行失败");
var_dump($res);
//返回的是一个布尔值
if (!$res) {
echo "删除失败";
}
echo "受影响的行数: " . mysqli_affected_rows($conn);
if(mysqli_affected_rows($conn)>0){
echo "添加成功";
}else{
echo "没有影响的行数";
}
4.释放资源
注意:释放结果集和关闭连接内填的资源不一样
// 释放结果集
mysqli_free_result($res);
// 函数关闭先前打开的数据库连接
mysqli_close($conn);
封装cuid工具
sqltool.class.php
<?php
class sqltool{
private $conn;
private $host="localhost";
private $user='root';
private $password='';
private $db='user';
// 构造方法,初始化连接数据库及设置字符编码
function __construct(){
$this->conn=mysqli_connect($this->host,$this->user,$this->password,$this->db);
if (!$this->conn) {
die("连接失败".mysqli_error());
}
mysqli_set_charset($this->conn,"utf8");
}
// 执行dml语句,并返回值
function excute_dml($sql){
$res=mysqli_query($this->conn,$sql) or die("shiai").mysqli_error();
if (!$res) {
return 0;
}else{
// mysqli_affected_rows:并影响的行数
if (mysqli_affected_rows($this->conn)>0) {
return 1;
}else{
return 2;
}
}
}
// 执行dql语句,并返回值
function excute_dql($sql){
$res=mysqli_query($this->conn,$sql) or die("shibai");
//var_dump($res);
return $res;
}
}
testsql.php
<?php
require "sqltool.class.php";
//$sql="insert into user1(name,password,email,age) values('hhhhhh',md5('123'),'qq@163.com',22)";
$sql="delete from user1 where name='qq'";
$sqltool=new sqltool();
// 调用dml
$res=$sqltool->excute_dml($sql);
if ($res==0) {
echo "执行失败<br/>";
}else if ($res==1) {
echo "执行成功<br/>";
}else if ($res==2) {
echo "没有影响到行数<br/>";
}
$sql1="select * from user1";
// 调用dql
$res1=$sqltool->excute_dql($sql1);
//var_dump($res1);
if ($res1->num_rows>0) {
while ($row=mysqli_fetch_row($res1)) {
//var_dump($row);
//echo "<br/>";
foreach ($row as $key => $value) {
echo "---$value";
}
echo "<br/>";
}
}
?>
面向对象的编程
mysqlitest.php
<?php
//面向对象
$conn=new mysqli("127.0.0.1","root","","test");
if ($conn->connect_errno) {
echo $conn->connect_error;
}
$sql="select * from user1";
$res=$conn->query($sql);
while ($row=$res->fetch_row()) {
foreach ($row as $key => $value) {
echo "<br/>".$value;
}
}
$res->free();
$conn->close();
?>
封装
sqliconnection.class.php
<?php
class sqlconnect{
private $mysqli;
private static $host="127.0.0.1";
private static $user="root";
private static $password="";
private static $database="test";
//构造函数
function __construct(){
$this->mysqli=new MySQLi(self::$host,self::$user,self::$password,self::$database);
if (!$this->mysqli) {
die("数据库链接失败".$this->mysqli->connect_error);
}
$this->mysqli->query("set names utf8");
}
//查询
public function excete_dql($sql){
$res=$this->mysqli->query($sql) or die("数据库查询失败".$this->mysqli->error);
return $res;
}
public function excete_dml($sql){
$res=$this->mysqli->query($sql) or die("数据库查询失败".$this->mysqli->error);
if (!$res) {
return 0;
}else{
if ($this->mysqli->affected_rows>0) {
return 1;
}else{
return 2;
}
}
}
}
?>
sqlitest.php
<?php
require "sqliconnection.class.php";
$sqlconnect=new sqlconnect();
//插入记录
$sql1="INSERT INTO user1(name,Password,Email,age)VALUES('asd','555','asd@qq.com','23');";
$res1=$sqlconnect->excete_dml($sql1);
if ($res1=="0") {
echo "失败<br/>";
}elseif ($res1=="1") {
echo "成功<br/>";
}elseif ($res1=='2') {
echo "没有影响到行数<br/>";
}
// 查询记录
$sql="select * from user1";
$res=$sqlconnect->excete_dql($sql);
while ($row=$res->fetch_row()) {
foreach ($row as $key => $value) {
echo "---$value";
}
echo "<br/>";
}
$res->free();
// $sqlconnect->close();
?>
【二十】mysqli基于面向过程与面向对象的编程的更多相关文章
- C语言学习系列(二)面向过程和面向对象
一.基本定义 (一).面向过程(procedure oriented programming POP) 面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可. ...
- JS是面向过程、面向对象还是基于对象?面向对象的代码体现
一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...
- PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理
相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析 PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...
- python 面向过程和面向对象比较
面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...
- python基础(23):面向过程与面向对象的优劣、初识面向对象
1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...
- [python]两种编程思维--面向过程和面向对象
例如:eg:炒一份西红柿鸡蛋 一.面向过程 面向过程的编程思维,如下 二.面向对象 制作一台炒菜机器人,然后告诉机器人做一道西红柿炒鸡蛋.在这里,我们直接面对的是机器人,而非炒菜的过程,所以这里机器人 ...
- 面向过程 vs 面向对象
从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...
- C++笔记005:用面向过程和面向对象方法求解圆形面积
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. ...
- PHP面向过程和面向对象
php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...
随机推荐
- centos7安装shipyard没有本地容器及镜像
目前docker的使用越来越多,自然需要docker的管理工具.现在使用web管理的较多,web基本上实现了跨平台,只需要浏览器,不要额外的管理客户端.web管理主要推荐shipyard和kubern ...
- Akka(30): Http:High-Level-Api,Routing DSL
在上篇我们介绍了Akka-http Low-Level-Api.实际上这个Api提供了Server对进来的Http-requests进行处理及反应的自定义Flow或者转换函数的接入界面.我们看看下面官 ...
- 63、django之模版层(template)
上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...
- 【工具】Spring项目转化Spring Web项目插件
前言 源于前一篇博文中提到,将Spring项目转化为Spring Web项目,发现添加项目文件和修改pom.xml文件等都是手动完成的,心想着开发一个Idea插件来自动化完成上面的过程,实现一键转化. ...
- yii2之DetailView小部件
DetailView小部件用于展示单条数据记录,可配置属性很少,使用也很简单,直接贴代码,一看就懂! yii小部件数据小部件DetailView的使用示例: <?= DetailView::wi ...
- Java调用C++类库--JNI
JNI是Java平台中的一个重要的功能,这里我把我做的Demo总结一下,分享一下,我会把每个步骤尽量的详细的展现出来. 这里我就不讲解JNI的原理了,google,百度一下,到处都是 好了,直接来讲步 ...
- 2017年编程语言排行榜Top10,第一名是?
关注 最近,IEEE Spectrum 杂志(美国电气电子工程师学会出版的旗舰杂志)发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜.据介绍,IEEE Spectrum 的排 ...
- The Suspects(并查集维护根节点信息)
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 37090 Accepted: 17980 De ...
- HDU 1074 Doing Homework (状态压缩DP)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest J Cleaner Robot
Cleaner RobotCrawling in process... Crawling failed Time Limit:2000MS Memory Limit:524288KB ...