PHP系列(十一)PHP操作mysql(i)数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

                   Php操作Mysql数据库】

PHP脚本中操作MySQL数据库的的六个步骤如下:

1.连接MySQL数据库服务器并判断是否连接正确

2.选择数据库

3.设置字符集

4.准备SQL语句并发送SQL语句到MySQL服务器并获取记录集

5.处理结果集

6.释放结果集资源,关闭数据库连接

 

一.PHP连接到MySQL

<?php

//我们全面采用UTF-8 编码。

header('Content-Type:text/html;charset=utf-8');

 

//连接MySQL

$conn = @mysql_connect(DB_HOST,DB_USER,DB_PASSWORD)or die('数据库连接失败!错误信息:'.mysql_error());

 

//数据库连接参数,可以用常量存储,这样就不能修改,更加安全。

define('DB_USER','root');

define('DB_PASSWORD','yangfan');

define('DB_HOST','localhost');

define('DB_NAME' ,'school');

 

//选择你所需要的数据库

@mysql_select_db(DB_NAME) or die('数据库找不到!错误信息:'.mysql_error());

 

//设置字符集,如果是GBK,直接设置SET NAMES GBK 即可

@mysql_query('SET NAMES UTF8') or die('字符集设置错误');

 

//获取记录集

$query = "SELECT * FROM grade";

$result = @mysql_query($query) or die('SQL 语句有误!错误信息:'.mysql_error());

 

//输出一条记录

print_r(mysql_fetch_array($result,MYSQL_ASSOC));

 

//释放结果集资源

mysql_free_result($result);

 

//关闭数据库

mysql_close($conn);

?>

 

二.增删改查

1、新增数据

<?php

$query = "INSERT INTO grade (name,email,point,regdate)VALUE ('王五','yc60.com@gmail.com',,NOW())";

@mysql_query($query) or die('添加数据出错:'.mysql_error());

?>

2、修改数据

<?php

$query = "UPDATE grade SET name='小可爱' WHERE id=6";

@mysql_query($query) or die('修改出错:'.mysql_error());

?>

3、删除数据

<?php

$query = "DELETE FROM grade WHEREid=6";

@mysql_query($query) or die('删除错误:'.mysql_error());

?>

4、显示数据

<?php

$query = "SELECT id,name,email,pointFROM grade";

$result = @mysql_query($query) or die('查询语句出错:'.mysql_error());

while (!!$row = mysql_fetch_array($result)) {

echo$row['id'].'----'.$row['name'].'----'.$row['email'].'----'.$row['point'];

echo '<br />';

}

?>

三.其他常用函数

结果集取出来的函数:

mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组。

mysql_fetch_row() 函数从结果集中取得一行作为索引数组。

mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有

mysql_num_rows()函数返回结果集中行的数目。

mysql_fetch_row():从结果集中取得一行作为枚举数组

mysql_fetch_array() 从结果集中取得一行作为关联数组,或数字数组,或二者兼有

mysql_fetch_lengths () 取得结果集中每个输出的长度

mysql_field_name() 取得结果中指定字段的字段名

mysql_num_rows() 取得结果集中行的数目

mysql_num_fields():取得结果集中字段的数目

mysql_get_client_info() 取得MySQL 客户端信息

mysql_get_host_info() 取得MySQL 主机信息

mysql_get_proto_info() 取得MySQL 协议信息

mysql_get_server_info() 取得MySQL 服务器信息

 

 

php连接 mysqli

PHPmysqli扩展提供了其先行版本的所有功能,此外,由于MySQL已经是一个

具有完整特性的数据库服务器,这为PHP又添加了一些新特性。而mysqli恰恰也支持了

这些新特性。

一.建立和断开连接

MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库,以及最后关闭连接。与mysqli几乎所有的特性一样,这一点可以使用面向对象的方法来完成,也可以采用过程化的方式完成。

1.创建一个mysqli的对象

$_mysqli new mysqli();

 

2.连接MySQL的主机、用户、密码、数据库

$_mysqli->connect('localhost','root','yangfan','guest');

 

3.创建带连接参数的mysqli对象

$_mysqli new mysqli('localhost','root','yangfan','guest');

 

4.单独选择数据库

$_mysqli->select_db('testguest');

 

5.断开MySQL

$_mysqli->close();

 

二.处理连接错误

如果无法连接MySQL数据库,那么这个页面不太可能继续完成预期的工作。因此,一定要注意监视连接错误并相应地做出反应。Mysqli扩展包含有很多特性可以用来捕获错误信息,例如:mysqli_connect_errno()mysqli_connect_error()方法。

mysqli_connect_errno()函数返回连接数据库返回的错误号。

Mysqli_connect_error()函数返回连接数据库返回的错误代码。

 

if (mysqli_connect_errno()) {

echo '数据库连接错误,错误信息:'.mysqli_connect_error();

exit();

}

errno属性返回数据库操作时的错误号。

error属性返回数据库操作时的错误代码。

if ($_mysqli->errno) {

echo '数据库操作时发生错误,错误代码是:'.$_mysqli->error;

}

三.与数据库进行交互

绝大多数查询都与创建(Creation)、获取(Retrieval)、更新(Update)和删除(Deletion)任务有关,这些任务统称为CRUD

1.获取数据

网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送

SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。

//设置一下编码utf8

$_mysqli->set_charset("utf8");

 

//创建一句SQL语句

$_sql "SELECT * FROM tg_user";

 

//执行sql语句把结果集赋给$_result

$_result $_mysqli->query($_sql);

 

//将结果集的第一行输出

print_r($_result->fetch_row());

 

//释放查询内存(销毁)

$_result->free();

 

2.解析查询结果

一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个

方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。

将结果集放到对象中

由于你可能会使用mysqli的面向对象的语法,所以完全可以采用面向对象的方式管理结果集。可以使用fetch_object()方法来完成。

//将结果集包装成对象

$_row $_reslut->fetch_object();

 

//输出对象中的一个字段(属性)

echo $_row->tg_username;

 

//遍历所有的用户名称

while (!!$_row $_reslut->fetch_object()) {

echo $_row->tg_username.' <br /> ';

}

 

使用索引数组和关联数组

//将结果集包装成数组(索引+关联)

$_row $_reslut->fetch_array();

 

//输出下标是3的字段(属性)

echo $_row[3];

 

//将结果集包装成索引数组

$_row $_reslut->fetch_row();

echo $_row[3];

 

//将结果集包装成关联数组

$_row $_reslut->fetch_assoc();

echo $_row['tg_username'];

 

3.确定所选择的行和受影响的行

通常希望能够确定SELECT查询返回的行数,或者受INSERT、UPDATE或DELET查询影响的行数。我们可以使用num_rows和affected_rows两个属性

//当使用查询时,想了解SELECT查询了多少行,可以使用num_rows。

echo $_reslut->num_rows;

 

//当使用查询时,想了解SELECT、INSERT、UPDATE、DELETE查询时影响的行数,可以使用affected_rows;注意,它是$_mysqli下的属性

echo $_mysqli->affected_rows;

 

4.移动指针的操作和获取字段

当你并不想从第一条数据开始获取,或者并不想从第一个字段获取,你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。当然,你还可以获取字段的名称及其相

关的属性。

//计算有多少条字段

echo $_reslut->field_count;

 

//获取字段的名称

$_field $_reslut->fetch_field();

echo $_field->name;

 

//遍历字段

while (!!$_field $_reslut->fetch_field()) {

echo $_field->name.'<br />';

}

 

//一次性取得字段数组

print_r($_reslut->fetch_fields());

 

//移动数据指针

$_reslut->data_seek(5);

 

//移动字段指针

$_reslut->field_seek(2);

 

5.执行多条SQL语句

有的时候,我们需要在一张页面上同时执行多条SQL语句,之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP提供了执行多条SQL语句

的方法$_mysqli->multi_query();

//创建多条SQL语句

$_sql .= "SELECT * FROM tg_user;";

$_sql .= "SELECT * FROM tg_photo;";

$_sql .= "SELECT * FROM tg_article";

//开始执行多条SQL语句

if ($_mysqli->multi_query($_sql)) {

//开始获取第一条SQL语句的结果集

$_result $_mysqli->store_result();

print_r($_result->fetch_array());

//将结果集指针移到下一个

$_mysqli->next_result();

$_result $_mysqli->store_result();

print_r($_result->fetch_array());

$_mysqli->next_result();

$_result $_mysqli->store_result();

print_r($_result->fetch_array());

} else {

echo 'sql语句有误!';

}

 

6.执行数据库事务

事务(transaction)是作为整个一个单元的一组有序的数据库操作。如果一组中的所有操作都成功,则认为事务成功,即使只有一个失败操作,事务也不成功。如果所有操作成功完成,事务则提交(commit),其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚(rollback),该事务所有操作的影响都将取消。首先,您的MySQL是InnoDB或BDB引擎的一种,一般来说,你安装了AppServ的集成

包,你选择InnoDB的引擎的数据库即可。如果你建立的表不是InnoDB,可以在phpmyadmin

里修改。

//首先你必须关闭自动提交数据

$_mysqli->autocommit(false);

//创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败

$_sql .= "UPDATE tg_friend SETtg_state=tg_state+5 WHERE tg_id=1;";

$_sql .= "UPDATE tg_flower SETtg_flower=tg_flower-5 WHERE tg_id=1;";

 

//执行两条SQL语句

if ($_mysqli->multi_query($_sql)) {

//获取第一条SQL一影响的行数

$_success $_mysqli->affected_rows == true false;

//下移,第二条SQL

$_mysqli->next_result();

//获取第二条SQL影响的行数

$_success2 $_mysqli->affected_rows == true false;

//判断是否都正常通过了,两个SQL

if ($_success &&$_success2) {

$_mysqli->commit();

echo '完美提交!';

else {

$_mysqli->rollback();

echo '程序出现异常!';

}

else {

echo "SQL语句有误:".$_mysqli->errno.$_mysqli->error;

}

//最后还必须开启自动提交

$_mysqli->autocommit(true);

 

本文转自 sswqzx 51CTO博客,原文链接:http://blog.51cto.com/sswqzx/1969832


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
39 2
|
4天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
14 0
|
19天前
|
关系型数据库 MySQL 数据库
卸载云服务器上的 MySQL 数据库
卸载云服务器上的 MySQL 数据库
33 0
|
1天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
10 0
|
9天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
9天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
11天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
11天前
|
关系型数据库 MySQL 数据库
数据库基础(mysql)
数据库基础(mysql)
|
11天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
38 3
|
12天前
|
存储 关系型数据库 MySQL
【后端面经】【数据库与MySQL】为什么MySQL用B+树而不用B树?-02
【4月更文挑战第11天】数据库索引使用规则:`AND`用`OR`不用,正用反不用,范围中断。索引带来空间和内存代价,包括额外磁盘空间、内存占用和数据修改时的维护成本。面试中可能涉及B+树、聚簇索引、覆盖索引等知识点。MySQL采用B+树,因其利于范围查询和内存效率。数据库不使用索引可能因`!=`、`LIKE`、字段区分度低、特殊表达式或全表扫描更快。索引与NULL值处理在不同数据库中有差异,MySQL允许NULL在索引中的使用。
17 3