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. Java13新特性 -- switch表达式

    引入了yield语句,用于返回值: 和return的区别在于:return会直接跳出当前循环或者方法,而yield只会跳出当前switch块. @Test public void testSwitch ...

  2. PMP 第7章错题总结

    这一章全是公式,是计算量最大的一章 1.进度安排的灵活性是由总时差决定的2.三点估算通过考虑估算中的不确定性和风险,可以提高活动持续时间估算的准确性3.快速跟进是一种进度压缩技术,将正常情况下按顺序进 ...

  3. MSSQL中 float转换为varchar 变成科学计数法解决方案

    在系统初始化的时候,没有在数值型的数据前面加上 单引号,导致进入数据库后都变成float型我们需要做以下转换就能将数据变为 varchar类型 declare @a float //定义一个float ...

  4. WinSCP-windows与Linux之间文件传输

    WinSCP是一款Windows下通过使用SSH协议的开源工具,用于连接Linux操作系统,可以上传或者下载文件使用! 开源顾名思义,无需注册,安装即可使用!(安装请自行百度WinSCP) 打开桌面上 ...

  5. IIS部署FLASK网站

    在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助. 涉及工具和平 ...

  6. 2019年新加坡之行 Day 1

    又到了公司每年一次的年度旅游,继前几年的香港.日本.韩国游后,今年公司选择了新加坡.由于之前曾在新加坡公司The Adventus Consultants工作过2年时间,所以对于这次重返新加坡,我还是 ...

  7. Oracle Spatial分区应用研究之七:同等分区粒度下全局索引优于分区索引的原因分析

    1.实验结论 同等分区粒度下,使用分区空间索引进行空间查询,比使用全局空间索引进行查询,对数据字典表的访问次数更多.假设分区数为X,则大概多3X次访问.具体说明见6实验结论. 2.实验目的 在之前的测 ...

  8. svg可视化制作工具

    svg可视化制作工具直接ai里面用钢笔路径画好 然后右键建立复合路径 最后存储为svg即可 这样生成的svg就带path标签了

  9. 2019牛客暑期多校训练营(第二场)H Second Large Rectangle

    示例一: 输入  : 1 2 01 输出: 0 示例二: 输入  : 1 3 101 输出: 1 示例三(自己自测找错误用的): 输入  : 6 610011111101111111111111111 ...

  10. ubuntu 安装和配置 GitLab

    一.概述 GitLab 是一个基于 Web 的开源 Git 软件仓库管理器,用 Ruby 编写,包括 wiki,问题管理,代码审查,监控以及持续集成和部署.它使开发人员能够创建,审查和部署他们的项目. ...