PHP操作MySQL数据库(连接、增删改操作)
MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法。主要是使用MySQL扩展,下面就通过归纳总结来提升。
MySQL概述
MySQL 是以公司创始人 Monty Widenius’s daughter: My 命名的。
PHP 与 MySQL 结合是跨平台的。(您可以在 Windows 上开发,在 Unix 平台上应用。)
数据库连接
PHP 使用 MySQL 数据库前,需要先将它们连接。
PHP连接MySQL的四种方式:
- MySQL 扩展
- MySQLi 扩展 (“i” 意为 improved)
- PDO (PHP Data Objects)
PHP 使用 ODBC 连接数据库
PHP 5 及以上版本推荐使用MySQLi 扩展和PDO。在 PHP 早起版本中我们使用 MySQL 扩展。但该扩展在 2012 年开始不建议使用。
MySQLi | PDO
—|—
只针对 MySQL 数据库 | 应用在 12 种不同数据库中
面向对象(还提供API接口) | 面向对象
支持预处理语句 | 支持预处理语句预处理语句可以防止SQL注入,对于web项目的安全性是非常重要的。
PHP的MySQL扩展(优缺点)
设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口;
并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。
PHP的mysqli扩展
mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性;
mysqli扩展在PHP 5及以后版本中包含;
mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:面向对象接口、 prepared语句支持、多语句执行支持、事务支持、增强的调试能力、嵌入式服务支持。
PHP数据对象(PDO)
PHP数据对象,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以,使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器。
PHP 使用 ODBC 连接数据库
ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。
(1)创建 ODBC 连接
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。
(2)连接到 ODBC
odbc_connect()
函数用于连接到 ODBC 数据源。该函数有四个参数:数据源名、用户名、密码以及可选的指针类型。odbc_exec()
函数用于执行 SQL 语句。(3)取回记录
odbc_fetch_row()
函数用于从结果集中返回记录。如果能够返回行,则函数返回 true,否则返回 false。该函数有两个参数:ODBC 结果标识符和可选的行号,如:odbc_fetch_row($rs)
。(4)从记录中取回字段
odbc_result()
函数用于从记录中读取字段。该函数有两个参数:ODBC 结果标识符和字段编号或名称。$compname=odbc_result($rs,1);
从记录中返回第一个字段的值;compname=odbc_result($rs,"CompanyName");
返回名为 “CompanyName” 的字段的值。(5)关闭 ODBC 连接
odbc_close()
函数用于关闭 ODBC 连接,odbc_close($conn);
。
MySQL扩展连接数据库
mysql_connect()
函数打开非持久的 MySQL 连接123456789101112131415
<?php$host = "localhost"; //MySQL服务器名称 $user = "root"; //用户名 $password = "123456"; //访问密码 $db_name = "dsplab"; //数据库名称 $conn = mysql_connect($host,$user,$password) or die ("连接到MySQL服务器失败。".mysql_error()); //返回错误信息 mysql_select_db($db_name,$conn) or die ("连接数据库失败。".mysql_error()); //返回错误信息 // 设置数据格式,解决中文乱码 mysql_query('set names utf8'); mysql_close($con); // 关闭连接 ?>
mysql_close()
关闭连接,通常不必要,因为PHP在脚本终止时自动关闭打开的连接;mysql_pconnect()
函数打开一个到 MySQL 服务器的持久连接1234567
<?php $con = mysql_pconnect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); }?>
> 不能用`mysql_close()`关闭
区别。
mysql_pconnect()
和mysql_connect()
非常相似,但有两个主要区别:当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close()
不会关闭由mysql_pconnect()
建立的连接)。
MySQLi扩展连接数据库
MySQLi - 面向对象
1234567891011121314151617
<?php $servername = "localhost"; $username = "username"; $password = "password"; // 创建连接 $conn = new mysqli($servername, $username, $password); // 检测连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; // 关闭连接$conn->close();?>
MySQLi - 面向过程
1234567891011121314151617
<?php $servername = "localhost"; $username = "username"; $password = "password"; // 创建连接 $conn = mysqli_connect($servername, $username, $password); // 检测连接 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; // 关闭连接mysqli_close($conn);?>
PDO连接数据库
PDO
12345678910111213141516
<?php $servername = "localhost"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); echo "Connected successfully"; } catch(PDOException $e) { echo $e->getMessage(); } // 关闭连接 $conn = null;?>
注意在以上 PDO 实例中我们已经指定了数据库 (myDB)。PDO 在连接过程需要设置数据库名。如果没有指定,则会抛出异常。
增删改(创建数据库、数据表,增删改操作 )
这些操作,增删改三种操作除了返回操作成功与否的信息,没有其他结果返回,操作基本相同,只需要记住增删改操作的SQL语句即可。将SQL语句用双引号包含,赋值给变量$sql,之后用PHP代码操作:
面向对象
12345
if ($conn->query($sql) === TRUE) { echo "操作成功";} else { echo "存在错误: " . $conn->error;}
面向过程
12345
if (mysqli_query($conn, $sql)) { echo "操作成功";} else { echo "存在错误: " . mysqli_error($conn);}
PHP 中 SQL 查询语句语法规则
- PHP 中 SQL 查询语句必须使用引号
- 在 SQL 查询语句中的字符串值必须加引号
- 数值的值不需要引号
- NULL 值不需要引号
创建数据库、数据表
面向对象
12345678910111213141516171819202122
// 创建数据库$sql = "CREATE DATABASE myDB";if ($conn->query($sql) === TRUE) { echo "Database created successfully";} else { echo "Error creating database: " . $conn->error;} // 创建数据表$sql = "CREATE TABLE MyGuests (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL,lastname VARCHAR(30) NOT NULL,email VARCHAR(50),reg_date TIMESTAMP)"; if ($conn->query($sql) === TRUE) { echo "Table MyGuests created successfully";} else { echo "Error creating table: " . $conn->error;}
创建一个名为 “MyGuests” 的表,有 5 个列: “id”, “firstname”, “lastname”, “email” 和 “reg_date”
面向过程
12345678910111213
// 创建数据库,$sql语句同上if (mysqli_query($conn, $sql)) { echo "Database created successfully";} else { echo "Error creating database: " . mysqli_error($conn);} // 创建数据表,$sql语句同上if (mysqli_query($conn, $sql)) { echo "Table MyGuests created successfully";} else { echo "Error creating table: " . mysqli_error($conn);}
插入记录
INSERT INTO 语句通常用于向 MySQL 表添加新的记录:
1
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
注意: 如果列设置 AUTO_INCREMENT (如 “id” 列) 或 TIMESTAMP (如 “reg_date” 列),,我们就不需要在 SQL 查询语句中指定值; MySQL 会自动为该列添加值。
插入一条记录,采用下列SQL语句
1234567
// 插入一条记录// 方法一,按照表字段一一对应添加,缺一不可$sql = "INSERT INTO table_name VALUES ('value1', 'value2', ...)"; // 方法二,按指定的字段添加数据$sql = "INSERT INTO table_name (column1, column2, ...) VALUES ('value1', 'value2', ...)";
插入多条记录,采用下列SQL语句
123456789
// 插入多条记录$sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', 'mary@example.com');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', 'julie@example.com')";
删除
删除数据库、数据表、记录
12345678910
// 删除数据库 $sql = "drop database if exists <database_name>" // 删除数据表 $sql = "drop tabel if exists <table_name>" // 删除记录$sql = "DELETE FROM table_name" // 删除所有的数据// or $sql = "DELETE FROM table_name WHERE some_column = some_value" // 删除特定的数据
改(修改记录)
修改记录
12345
// 修改表名$sql = "alter table old_table_neme rename new_table_neme" // 修改记录 $sql = "UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value"
查询
查询记录
123456789
// 读取所有的数据$sql = "SELECT id, column1, column2 FROM table_name"; // where子句$sql = "SELECT field FROM table_name WHERE column_name operator value";$result = mysqli_query($con,"SELECT * FROM Persons WHERE FirstName='Peter'"); // 示例 // order by $sql = "UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value"
扩展——预处理语句及绑定参数
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
- 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
- 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出
- 执行:最后,将应用绑定的值传递给参数(”?” 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
- 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:
相比于直接执行SQL语句,预处理语句有两个主要优点:
- 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)
- 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句
- 预处理语句针对SQL注入是非常有用的,因为 参数值发送后使用不同的协议,保证了数据的合法性。
MySQLi预处理
1234567891011121314151617181920212223242526
// prepare and bind// 在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。// 该函数绑定了 SQL 的参数(每个参数都需要指定类型),且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");$stmt->bind_param("sss", $firstname, $lastname, $email); // 设置参数并执行$firstname = "John";$lastname = "Doe";$email = "john@example.com";$stmt->execute(); $firstname = "Mary";$lastname = "Moe";$email = "mary@example.com";$stmt->execute(); $firstname = "Julie";$lastname = "Dooley";$email = "julie@example.com";$stmt->execute(); echo "New records created successfully"; $stmt->close();$conn->close();
绑定参数(bind_param)有以下四种类型:
- i - integer(整型)
- d - double(双精度浮点型)
- s - string(字符串)
- b - BLOB(布尔值)
如果你想插入其他数据(用户输入),对数据的验证是非常重要的。
关于查询的返回结果,详见博客《php数据库中数据查询》
PHP操作MySQL数据库(连接、增删改操作)相关推荐
- adodb mysql.inc.php,php adodb操作mysql数据库示例(增删改查)
php adodb操作mysql数据库示例(增删改查) 发布于 2014-10-05 08:16:18 | 113 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: H ...
- MySQL——数据库的增删改操作
数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...
- 如何用eclipse操作MySQL数据库进行增删改查?
我们首先需要在Navicat Premium上创建一个数据库实例(test),然后创建一个stu_info表(id,name,mobile,address) 接着创建一个Test类进行操作: 在这之前 ...
- python操作mysql数据库实现增删改查
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...
- php操作mysql数据库(增删改查)
1:连接到mysql php本身提供腿mysql数据库的支持,使用mysql_connect函数来连接,语法如下: resource mysql_connect([string server [, s ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- 【接口测试】Day5-使用pymysql库对mysql数据库进行增删改查操作
目录 今日目标 一.数据库介绍 二.数据库基本操作 1.安装 2.操作流程(重点) 1. 创建连接 2. 获取游标 3. 执行sql 4. 关闭游标 5. 关闭连接 3.数据准备 4.数据库基本操作 ...
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...
- python操作mysql数据库(增、删、改、查)_python对 MySQL 数据库进行增删改查的脚本...
# -*- coding: utf-8 -*- import pymysql import xlrd # import codecs #连接数据库 conn = pymysql.connect(hos ...
- Java对MySQL数据库进行增删改查的操作(一)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
最新文章
- 人脸标记检测:ICCV2019论文解析
- bootstrap-less源码分析:行和列
- 26岁想转嵌入式软件开发来得及吗?参加嵌入式培训好不好?
- 武汉科技大学ACM:1002: 华科版C语言程序设计教程(第二版)例题6.6
- 表的插入、更新、删除、合并操作_17_按照条件删除表中记录
- SpringMVC的使用与requestMapper的使用
- python用另一个字段替代本字段的null_Python中的数据库
- xxx.jar 中没有主清单属性
- 004-JQuery属性
- 微服务架构之Spring Cloud Eureka入门程序
- 中乘风简书博文说明-风者须知
- 图像处理之图像傅里叶变换
- matlab圆锥曲线,Matlab软件在高中数学圆锥曲线学习过程中应用.doc
- 基于 CIM 的智慧社区总体框架
- linux单引号作用,linux中单引号、双引号、反引号的作用
- 生活小常识:增发防脱发
- 转载:云计算必将极大影响未来--云泉
- QPixmap显示图片
- manjaro命令和linux命令不一样,Manjaro: 一种不同的野兽
- geoserver离线地图服务搭建和图层发布
热门文章
- CSS3选择器:nth-child和:nth-of-type之间的差异的那些事儿
- jQuery Mobile Data 属性
- 深入探究VC —— 编译器cl.exe(1)
- 《C语言深度解剖》学习笔记之符号
- 运行velocity的官方例子
- mysql有dataguard吗_DataGuard部署
- c语言 Nimm game算法,尼姆博奕(Nimm Game)
- Ehab and Path-etic MEXs CodeForces - 1325C(思维+贪心)
- 2019蓝桥杯国赛B组第九题
- mysql行锁同索引键问题_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)