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. 如何防止Hangfire重复作业在连续执行30分钟后重新启动(How to prevent a Hangfire recurring job from restarting after 30 minutes of continuous execution)

    var options = new SqlServerStorageOptions { InvisibilityTimeout = TimeSpan .FromMinutes(30)//默认值}; G ...

  2. angular自定义module

    在app.module.ts里面,imports部分,添加你的自定义模块名在你的自定义模块内,添加了component以后,需要添加exports导出,类似下面 import { NgModule } ...

  3. Navicat连接MySQL8.0出现1251-Client does not support authentication protocol requested by server;

    因为安装的MySQL是8.0版本的,因为在安装的时候采用了新的加密方式. 我们需要使用 cmd命令,连接mysql 1.   更改加密方式 mysql> ALTER USER 'root'@'l ...

  4. VC++6.0 打印调试信息

    1.在MFC中加入TRACE语句 2.在TOOLS->MFC TRACER中选择 “ENABLE TRACING”点击OK 3.进行调试运行,GO(F5)(特别注意:不是执行‘!’以前之所以不能 ...

  5. 好用的npm包或者工具

    1.样式 classnames:https://github.com/JedWatson/classnames 2.随机数 uuid:https://github.com/kelektiv/node- ...

  6. 【python基础】easydict的安装与使用

    前言 easydict允许以属性的方式访问dict类型,且可以递归地访问,使用起来比较方便. 安装 pip install easydict 使用 参考 1. easydict; 完

  7. canal使用

    报错信息:com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set 解决方法: 找 ...

  8. HBase 详解

    1.HBase 架构 ============================================ 2. HBase Shell 操作 2.1. 基本操作 进入HBase客户端命令行:bi ...

  9. 初识阿里开源的本地Java进程监控调试工具arthas(阿尔萨斯)

    转载自:https://www.cnblogs.com/linhui0705/p/9795417.html 上个月,阿里开源了一个名为Arthas的监控工具.恰逢近期自己在写多线程处理业务,由此想到了 ...

  10. Versioning information could not be retrieved from the NuGet package repository. Please try again later.

    Versioning information could not be retrieved from the NuGet package repository. Please try again la ...