php与mysql交互 面向过程
1.建立、关闭与MySQL服务器的连接
1)连接指定的mysql服务器
$mysqli_connect=@mysqli_connect($host, $user, $password,$database,$port);
2)连接错误时的提示
int mysqli_connect_errno ();//返回最后一次连接调用的错误代码
string mysqli_connect_error ();//返回一个字符串描述的最后一次连接调用的错误代码
3)设置默认字符编码
bool mysqli_set_charset ( mysqli $link , string $charset )
4)选择特定的数据库
bool mysqli_select_db ( mysqli $link , string $dbname);
5)关闭与mysql服务器的连接
bool mysqli_close ( mysqli $link );
执行sql语句
1)对数据库执行一条SQL语句
1>mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] );
①对于insert,update,delete等不会返回数据的SQL语句,在执行没有错误时将返回true。
②对于返回数据的SQL语句执行成功的时候会返回结果集对象可以使用操作结果集对象的函数来从中获取数据
其中模式参数
③MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT决定了mysqli client和server之间取结果集的方式。
MYSQLI_STORE_RESULT:执行SQL时提取结果集返回给client,并分配内存,存储到用户程序空间中,之后mysqli_fetch_array()
相当于是从本地取数据;而MYSQLI_USE_RESULT方式下,mysqli_fetch_array()每次都要向server请求结果行。
MYSQLI_USE_RESULT:执行SQL的时候并没有从server将结果集取回
2>bool mysqli_real_query ( mysqli $link , string $query );
也可以使用本函数对数据库执行一条SQL语句,返回结果为布尔值,不返回结果集。
如果想获取结果集可以使用mysqli_store_result()获取结果集对象.
3>如果在执行SQL语句的时候发生错误,以上两个函数都将返回false,并且可以使用以下函数处理错误原因
int mysqli_errno ( mysqli $link );
string mysqli_error ( mysqli $link );
2)操作结果集对象的函数
1>从结果集对象中解析数据的常见函数
①以索引数组的方式获取一条记录的数据
mixed mysqli_fetch_row ( mysqli_result $result );
重复使用以获取下一条记录的数据
②以关联数组的方式获取一条记录的数据
array mysqli_fetch_assoc ( mysqli_result $result );
重复使用以获取下一条记录的数据
③以索引数组或关联数组的方式获取一条记录的数据
mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype = MYSQLI_BOTH ] );
重复使用以获取下一条记录的数据
④以索引数组或关联数组的方式获取全部记录的数据
mixed mysqli_fetch_all ( mysqli_result $result [, int $resulttype = MYSQLI_NUM ] );
⑤返回结果集中的下一个字段信息
object mysqli_fetch_field ( mysqli_result $result );
⑥返回一个代表结果集字段的对象数组
array mysqli_fetch_fields ( mysqli_result $result );
⑦获取结果中行的数量
int mysqli_num_rows ( mysqli_result $result );
注意:如果使用MYSQLI_USE_RESULT模式则必须在获取完结果集才可使用该函数。
2>释放与一个结果集相关的内存
返回的结果集在数据量很大的时候需要很多的内存支持,所以在操作完结果集的时候有必要立刻释放与一个结果集相关的内
存, 释放之后,结果集就不可用了
void mysqli_free_result ( mysqli_result $result );
3)其他常用函数
1>获取前一个Mysql操作的受影响行数
int mysqli_affected_rows ( mysqli $link );
2>返回最后一次操作自动生成并使用的id
mixed mysqli_insert_id ( mysqli $link );
3>转义用于SQL语句中的特殊字符防止SQL语句出错
string mysqli_real_escape_string ( mysqli $link , string $escapestr );
比如你像数据库插入的文本里面有特殊符号,使用这个函数可以解决。sql语句就可以使用定界符来定义字符串<<<STER insert into ....... STER;
不返回结果集对象 insert update delete
<?php
header('Content-type:text/html;charset=utf8');
//返回连接对象结果集 创建数据库连接,参数1 连接地址 参数2 用户名 参数3 密码 参数4 数据库(也可以不指定,后续再指定)
//参数5 端口3306;
$connection=mysqli_connect('localhost','root','','t3',);
//判断是否有连接的错误,返回错误代码 0表示没有错误
if(mysqli_connect_errno()){
//返回一个字符串描述的最后一次连接调用的错误代码,并且结束整个程序exit;
exit(mysqli_connect_error());
}
//设置连接字符编码
mysqli_set_charset($connection,'utf8');
//指定连接的数据库,这里也可以不指定,如果后续需要更换数据库的时候可以使用
// mysqli_select_db($connection,'t1');
//执行SQL数据
//1)对数据库执行一条SQL语句,只能执行 inert update delete;
//$sqlstr='update tech set id=10 where pwd=123456 '; 返回true
// $sqlstr='insert into tech (id,name,pwd) values (1,"杜伟",198988)'; 返回true var_dump(mysqli_query($connection,$sqlstr));//关闭数据库连接
mysqli_close($connection);
?>
返回结果集 select
<?php
header('Content-type:text/html;charset=utf8');
//返回连接对象结果集 创建数据库连接,参数1 连接地址 参数2 用户名 参数3 密码 参数4 数据库(也可以不指定,后续再指定)
//参数5 端口3306;
$connection=mysqli_connect('localhost','root','123456','t3',3306);
//判断是否有连接的错误,返回错误代码 0表示没有错误
if(mysqli_connect_errno()){
//返回一个字符串描述的最后一次连接调用的错误代码,并且结束整个程序exit;
exit(mysqli_connect_error());
}
//设置连接字符编码
mysqli_set_charset($connection,'utf8');
//指定连接的数据库,这里也可以不指定,如果后续需要更换数据库的时候可以使用
// mysqli_select_db($connection,'t1');
//执行SQL数据
//1)对数据库执行一条SQL语句,只能执行 inert update delete;
//$sqlstr='update tech set id=10 where pwd=123456 '; 返回true
// $sqlstr='insert into tech (id,name,pwd) values (1,"杜伟",198988)'; 返回true
//2)对于返回数据的sql语句执行成功会返回结果集对象。
$sqlstr='select * from tech'; //查询语句返回结果集对象 $result=mysqli_query($connection,$sqlstr);
//返回结果集对象,我们还需要对结果集解析
//1 print_r(mysqli_fetch_row($result)); //返回索引数组形式第一条数据,在执行 就是下一条
//循环输出返回的结果集;
// while($data=mysqli_fetch_row($result)){
// print_r($data);
// }
//2 print_r(mysqli_fetch_assoc($result)); //以关联数组的形式返回
//3 print_r(mysqli_fetch_array($result)); //返回以关联数组和索引数组的形式;
//4 print_r(mysqli_fetch_all($result,MYSQLI_ASSOC)); //返回结果集所有记录,默认使用索引数组,MYSQLI_ASSOC关联模式
//5 print_r(mysqli_fetch_field($result)); //返回一个结果集中字段的信息
//6 print_r(mysqli_fetch_fields($result)); //返回所有字段信息的数组。
echo mysqli_num_rows($result); //返回结果中的行数量
//释放连接内存
// mysqli_free_result($result);
//关闭数据库
mysqli_close($connection);
?>
使用mysqli_real_query和mysqli_store_result
<?php
header('Content-type:text/html;charset=utf8');
$link=mysqli_connect('localhost','root','123456','t3',3306);
if(mysqli_connect_errno()){
echo mysqli_connect_error();
}
mysqli_set_charset($link,'utf8'); //$sqlstr='insert into tech values (4,"徐海风",456789)';
//下列函数只返回false true 不返回结果集,多用于判断
//mysqli_real_query($link,$sqlstr); $selstr='select * from tech';
//利用mysqli_real_query 返回true 或false 来判断是否有数据
if(mysqli_real_query($link,$selstr)){
//mysqli_store_result函数只返回结果集 来获取结果集
$result= mysqli_store_result($link);
print_r(mysqli_fetch_all($result));
} mysqli_close($link); ?>
一次执行多条sql语句,每个sql语句用分号隔开
bool mysqli_multi_query ( mysqli $link , string $query );
<?php
header('Content-type:text/html;charset=utf8');
$link=mysqli_connect('localhost','root','123456','t3',3306);
if(mysqli_connect_errno()){
print_r(mysqli_connect_error());
}
mysqli_set_charset($link,'utf8'); //一次性插入3条语句
$str='insert into tech values (2,"夏远静",789789);insert into tech values (5,"夏天",789789);insert into tech values (6,"于海燕",786789);';
mysqli_multi_query($link,$str); //使用mysqli_multi_query()函数 mysqli_close($link);
?>
预处理机制
1)准备一个用于执行的SQL语句
mysqli_stmt mysqli_prepare ( mysqli $link , string $query );
2)将变量作为参数绑定到prepared语句上
bool mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var1 [, mixed &$... ] );
参数string $types说明:表示后面多个可选参数变量的数据类型,一一对应.
i:int类型
d:double或者float类型
s:字符串类型
b:二进制数据类型(BLOB、二进制字符串)
3)执行一个prepared准本好的语句
bool mysqli_stmt_execute ( mysqli_stmt $stmt );
上述三步骤举例
$query='insert into t1(id,info,content,filed1) values(?,?,?,?)';
//准备要执行的SQL语句
$stmt=mysqli_prepare($link, $query);
//为?绑定变量
mysqli_stmt_bind_param($stmt,'issd',$val1,$val2,$val3,$val4);
$val1=1;
$val2='第五代青蛙';
$val3='的武器大全我带我去';
$val4=60.5;
//执行准备好的SQL语句
var_dump(mysqli_stmt_execute($stmt));
<?php
header('Content-type:text/html;charset=utf8');
$link=mysqli_connect('localhost','root','123456','t3',3306);
if(mysqli_connect_errno()){
print_r(mysqli_connect_error());
}
mysqli_set_charset($link,'utf8'); //预处理机制
//? 占位符,表示你要代替的变量 $str='insert into tech values (?,?,?)';
//预备一个用于执行的sql语句,它返回mysqli_stmt (数据库类型)
$stmt=mysqli_prepare($link,$str);
//将变量作为参数绑定prepare语句上,
//1.第一个参数为数据库类型对象
//2.第二个参数为 ?占位符的数据类型字符串 i=int s=stirng d=double
//3.第三个参数为?站位的变量,有?就写几个变量
mysqli_stmt_bind_param($stmt,'isi',$id,$name,$pwd);
$id=8;
$name="夏洛特";
$pwd=456789;
//执行语句;此函数不返回结果集
mysqli_stmt_execute($stmt); //成功添加数据库 mysqli_close($link);
?>
如果是select之类的语句需要具体的结果;
4)将查询出的数据绑定到PHP变量上
bool mysqli_stmt_bind_result ( mysqli_stmt $stmt , mixed &$var1 [, mixed &$... ] );
5)从一个prepared语句中抓取结果到指定变量中
bool mysqli_stmt_fetch ( mysqli_stmt $stmt );
<?php
header('Content-type:text/html;charset=utf8');
$link=mysqli_connect('localhost','root','123456','t3',3306);
if(mysqli_connect_errno()){
print_r(mysqli_connect_error());
}
mysqli_set_charset($link,'utf8'); $str='select * from tech where id<?';
//预备一个用于执行的sql语句,它返回mysqli_stmt (数据库类型)
$stmt=mysqli_prepare($link,$str);
//绑定变量
mysqli_stmt_bind_param($stmt,'i',$fid);
$fid=6; //返回结果集的(select)
//绑定返回的结果集到PHP变量上
mysqli_stmt_bind_result($stmt,$id,$name,$pwd);
//执行sql语句
mysqli_stmt_execute($stmt);
//抓取结果集
mysqli_stmt_fetch($stmt);
//输出结果
echo "{$id}->{$name}-----{$pwd}"; //优化下
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_bind_result($stmt,$fid,$fname,$fpwd);
while(mysqli_stmt_fetch($stmt)){
echo "{$fid}->{$fname}----{$fpwd}".'<br>';
}
}
mysqli_close($link);
?>
6)从一个prepared语句返回结果集元数据,配合相关函数,可以用来获得字段的相关信息
mysqli_result mysqli_stmt_result_metadata ( mysqli_stmt $stmt );
①mysqli_fetch_field();
②mysqli_fetch_fields();
7)取回一个结果集
bool mysqli_stmt_store_result ( mysqli_stmt $stmt );
取回之后可以使用int mysqli_stmt_num_rows ( mysqli_stmt $stmt );返回语句结果集中的行数
8)释放给定语句处理存储的结果集所占内存
void mysqli_stmt_free_result ( mysqli_stmt $stmt );
9)关闭一个prepared语句
bool mysqli_stmt_close ( mysqli_stmt $stmt );
php与mysql交互 面向过程的更多相关文章
- PHP中用mysqli面向过程打开连接关闭mysql数据库
代码如下: <meta http-equiv="content-type" content="text/html" charset="utf-8 ...
- 从面向过程到面向对象再到MVC
/* * * title: 从面向过程到面向对象再到MVC * author: tanghao * date: 2020.9.30 * version: 1.0 * */ 前言 本文档通过一个显示20 ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理
相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析 PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...
- 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO
引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...
- 面向过程 vs 面向对象
从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...
- Hadoop集群(第10期)_MapReduce与MySQL交互
2.MapReduce与MySQL交互 MapReduce技术推出后,曾遭到关系数据库研究者的挑剔和批评,认为MapReduce不具备有类似于关系数据库中的结构化数据存储和处理能力.为此,Google ...
- <一>面向对象分析之面向对象和面向过程
面向对象 ---->注重的是拆分,组装. ---->封装,继承,多态,复用(只是现象) ---->面向对象变成的目标从来就不是复用.相反,对 ...
- 【二十】mysqli基于面向过程与面向对象的编程
面向过程的方式 musqli扩展库操作mysql数据库步骤: 1.获取连接并选择数据库 //语法 mysqli_connect(host,username,password,dbname,port,s ...
随机推荐
- Cassandra开发入门文档第二部分(timeuuid类型、复合主键、静态字段详解)
timeuuid类型 timeuuid具有唯一索引和日期时间的综合特性,可以与日期和时间函数联合使用,常用的关联函数: dateOf() now() minTimeuuid() and maxTime ...
- EasyNVR摄像机网页无插件直播方案H5前端构建之:接口调用获取实时信息
背景分析 熟悉EasyNVR产品的小伙伴应该知道,EasyNVR主要针对的是安防类的项目,通过RTSP/onvif协议将前端高清网络摄像机IPC.NVR等接入进来,然后将设备端的音视频通过采集.转换, ...
- Docker是什么?
Docker是什么? Docker是一个虚拟环境容器,可以将你的环境.代码.配置文件等一并打包到这个容器中,并发布和应用到任意平台中.比如,你在本地部署了git,jenkins等,可以将其与插件一并打 ...
- 【转载,备忘】SQL Server 更改跟踪(Chang Tracking)监控表数据
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(Refere ...
- webStrom中React语法提示,React语法报错处理
1,webStrom中React语法报错 ①, 取消Power Save Mode的勾选 File——Power Save Mode ②,webstorm开发react-native智能提示 随便在一 ...
- DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集
复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...
- Windows10下QT5.13.2安装mingw64/MYSQL8.0驱动
开始之前,先将编译器的路径添加到系统环境变量. 我的QT所以sql驱动是在下面这个目录中(大家在自己Qt的安装目录找到对应的文件夹就行,下面的路径也是如此), E:\qt\5.13.2\mingw73 ...
- python--osi七层模型
OSI七层模型 OSI七层参考模型 学计算机的人想必都对OSI七层参考模型不陌生,OSI七层参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系.它是一个七层的.抽象的模型 ...
- Python中NumPy的使用一
NumPy简介: 一个用python实现的科学计算,包括:1.一个强大的N维数组对象Array:2.比较成熟的(广播)函数库:3.用于整合C/C++和Fortran代码的工具包:4.实用的线性代数.傅 ...
- 使用Nginx的X-Accel-Redirect实现大文件下载
在实现文件下载功能时通常有以下几种方式: 1.直接给出下载地址,例如http://****.com/test/test.rar,这种是最直接的方式,任何人都可以下载,无法控制用户的权限. 2.验证权限 ...