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交互 面向过程的更多相关文章

  1. PHP中用mysqli面向过程打开连接关闭mysql数据库

    代码如下: <meta http-equiv="content-type" content="text/html" charset="utf-8 ...

  2. 从面向过程到面向对象再到MVC

    /* * * title: 从面向过程到面向对象再到MVC * author: tanghao * date: 2020.9.30 * version: 1.0 * */ 前言 本文档通过一个显示20 ...

  3. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

    [转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...

  4. PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...

  5. 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

    引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...

  6. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

  7. Hadoop集群(第10期)_MapReduce与MySQL交互

    2.MapReduce与MySQL交互 MapReduce技术推出后,曾遭到关系数据库研究者的挑剔和批评,认为MapReduce不具备有类似于关系数据库中的结构化数据存储和处理能力.为此,Google ...

  8. <一>面向对象分析之面向对象和面向过程

    面向对象        ---->注重的是拆分,组装.        ---->封装,继承,多态,复用(只是现象)        ---->面向对象变成的目标从来就不是复用.相反,对 ...

  9. 【二十】mysqli基于面向过程与面向对象的编程

    面向过程的方式 musqli扩展库操作mysql数据库步骤: 1.获取连接并选择数据库 //语法 mysqli_connect(host,username,password,dbname,port,s ...

随机推荐

  1. GoldenGate 19.1 发布

    GoldenGate 19.1 新特性 For the Oracle Database ➢ Oracle Database 19c Support 支持从Oracle DB 19c抽取和投递数据,包括 ...

  2. CVI中调用VC动态库

    1.在VC环境中建立新工程,创建32位动态库(Win32 Dynamic-Link Library)  -> A simple DLL project 2.在工程中可加入别的动态库,在工程菜单中 ...

  3. python 科学计算基础库安装

    1.numpyNumPy(Numeric Python)是用Python进行科学计算的基本软件包. NumPy是Python编程语言的扩展,增加了对大型多维数组和矩阵的支持,以及一个大型的高级数学函数 ...

  4. django 未成功初始化自定义表单

    用以下两句 python3 manage.py makemigrations python3 manage.py migrate 成功初始化了数据库,但是只初始化了django自带的表,未初始化我自定 ...

  5. linux iftop查看流量的方法

    linux iftop查看流量的方法iftop 默认是查看eth0网卡的流量 这个是内网iftop -i eth1 检测eht1网卡的流量 eth1一般都是外网 具体可以iftop查看详细信息 < ...

  6. ConcurrentHashMap多线程下比HashTable效率更高

    HashTable使用一把锁处理并发问题,当有多个线程访问时,需要多个线程竞争一把锁,导致阻塞 ConcurrentHashMap则使用分段,相当于把一个HashMap分成多个,然后每个部分分配一把锁 ...

  7. redis常用命令及持久化机制

    redis  常用命令 查找redis服务文件 find / -name  redis-server 查找配置文件 find / -name redis.conf 启动服务时候,要指定配置文件 启动r ...

  8. Qt中 布局管理器失效问题

    1 问题描述 在Qt5.12.0 版本中,使用 自动管理器发生,无法生效 2 问题代码 Widget::Widget(QWidget *parent) : QWidget(parent), butto ...

  9. Python的正则表达式和爬虫

    1.常用元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 2.常用限 ...

  10. 【论文排版工具】——LaTeX的安装及使用(MiKTeX+TexStudio+Windows)

    版权声明:本文为CSDN博主「豆豆花」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/weixin_405 ...