PHP操作MySQL数据库
PHP只有与数据库相结合,才能充分发挥动态网页编程语言的魅力,因为网络上的众多应用都是基于数据库的。在各种数据库中,MySQL由于其免费、跨平台、使用方便、访问效率高等优点而获得了广泛应用。PHP支持多种数据库,尤其与MySQL被称为黄金组合。很多中型网站都使用PHP+MySQL这一最佳搭档。本文将讲解如何运用PHP操作MySQL数据库。
一、PHP访问MySQL数据库的一般步骤
主要有6个步骤:
S1.连接MySQL服务器:使用mysql_connect()函数建立与MySQL服务器的连接。建立数据库的持续连接mysql_pconnect()。
S2.创建数据库和表:使用mysql_query()函数创建数据库和数据表。
S3.选择MySQL数据库:使用mysql_select_db()函数选择MySQL数据库服务器上的数据库,并与数据库建立连接。
S4.执行SQL语句:在选择的数据库中使用mysql_query()函数执行SQL语句。对数据的操作方式主要包括5种方式。
a.查询数据:使用select语句实现数据的查询功能
b.显示数据:使用select语句显示数据的查询结果
c.插入数据:使用insert into语句向数据库中插入数据
d.更新数据:使用update语句更新数据库中的记录
e.删除数据:使用delete语句删除数据库中的记录
S5.关闭结果集:数据库操作完成后,需要关闭结果集,以释放系统资源,mysql_free_result($result);
S6.关闭MySQL服务器:脚本一结束,就会关闭连接。如需提前关闭连接,可使用 mysql_close() 函数。
二、PHP操作MySQL数据库的方法
PHP提供了大量的MySQL数据库函数,方便了对MySQL数据库进行操作,使Web程序的开发更加简单灵活。
1.使用mysql_connect()函数连接MySQL服务器
语法:mysql_connect(servername,username,password);
servername:可选。规定要连接的服务器。默认域名是localhost,默认端口号是3306。
username:可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。
password:可选。规定登录所用的密码。默认是 ""。
为了方便查询因为连接问题而出现的错误,可以加上die()函数进行错误屏蔽处理机制。可以使用mysql_error()函数提取MySQL函数的错误文本,如果没有出错,则返回空字符串。
密码错误,则输出以上错误。
断开MySQL数据库服务器,输出以上错误。
2.使用mysql_query()函数创建数据库和数据表
mysql_query("CREATE DATABASE db_name",$link) 语句可在 MySQL 中创建数据库,创建成功则返回true,失败则返回false;
mysql_query("CREATE TABLE tb_name (col_name1 col_type1, col_name2 col_type2, col_name3 col_type3)“,$link)语句可在 MySQL 中创建数据表,创建成功则返回true,失败则返回false。
3.使用mysql_select_db()函数选择数据库文件
语法格式:mysql_select_db ( string 数据库名[,resource link_identifier] )
或: mysql_query("use 数据库名"[,resource link_identifier]);
如果没有指定link_identifier,则使用上一个打开的连接。如果没有打开的连接,本函数将无参数调用mysql_connect()函数来尝试打开一个数据库并使用。其后每个mysql_query()函数调用都会作用于活动数据库。
4.使用mysql_query()函数执行SQL语句
语法格式:mysql_query(string query [, resource link_indentifier])
第一个参数:字符串类型,传入的是SQL语句;第二个参数:MySQL服务器的连接标识。mysql_query()函数中执行的SQL语句不应以分号结尾。
如果SQL语句是查询指令select,成功则返回查询后的结果集,失败则返回false; 如果SQL语句是insert、delete、update等操作指令,成功则返回true,失败则返回false。
mysql_unbuffered_query()函数向MySQL发送一条SQL语句,但不获取和缓存结果集。它不像mysql_query()函数那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存;另一方面,可以在获取第一行后立即对结果集进行操作,而不是等到整个SQL语句都执行完毕。
关键字 | 语 法 | 解 释 |
INSERT INTO |
INSERT INTO table_name
VALUES (value1, value2,....)
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
|
INSERT INTO 语句用于向数据库表添加新记录。SQL 语句对大小写不敏感。INSERT INTO 与 insert into 相同。 为了让 PHP 执行该语句,我们必须使用 mysql_query() 函数。该函数用于向 MySQL 连接发送查询或命令。 |
SELECT |
SELECT column_name(s) FROM table_name
|
SELECT 语句用于从数据库中选取数据。 |
WHERE |
SELECT column FROM table
WHERE column operator value
|
如需选取匹配指定条件的数据,请向 SELECT 语句添加 WHERE 子句。operator可以为:=、!=、>、<、>=、<=、BETWEEN、LIKE |
ORDER BY |
SELECT column_name(s)
FROM table_name
ORDER BY column_name
|
ORDER BY 关键词用于对记录集中的数据进行排序。 |
UPDATE |
UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value
|
UPDATE 语句用于在数据库表中修改数据。 |
DELETE FROM |
DELETE FROM table_name
WHERE column_name = some_value
|
DELETE FROM 语句用于从数据库表中删除记录。 |
5.从结果集中获取信息
a.使用mysql_fetch_array()函数从数组结果集中获取一行作为数组,语法格式为:array mysql_fetch_array(resource result [,int result_type])。注意:该函数返回的字段名区分大小写。
参数说明:result — 资源类型的参数,要传入的是由mysql_query()函数返回的数据指针。
result_type — 可选项,整数型参数,要传入的是MYSQL_ASSOC(关联索引)、MYSQL_NUM(数字索引)、MYSQL_BOTH(同时包含关联和数字索引的数组) 3种索引类型。默认值为MYSQL_BOTH。
$info = mysql_fetch_array($result); print_r($info);
b.使用mysql_fetch_object()函数从结果集中获取一行作为对象,语法格式为:object mysql_fetch_object(resource result)。与mysql_fetch_array()函数的唯一区别,mysql_fetch_object()函数只能通过字段名来访问数组。($row->col_name //col_name为列名,$row代表结果集)
c.使用mysql_fetch_row()函数逐行获取结果集中的每条记录。语法格式:array mysql_fetch_row(resource result)。mysql_fetch_row()函数从和指定的结果标识关联的结果集中获取一行数据并座位数组返回,将此行作为赋予数组变量$row。
d.使用mysql_num_rows()函数获取查询结果集中的记录数。语法格式为:int mysql_num_rows(resource result)
注意:使用mysql_unbuffered_query()函数查询到的数据结果,无法使用mysql_num_rows()函数来获取查询结果集中的记录数。
三、PHP操作MySQL数据库的案例
这里写了一些小的Demo,且在本地服务器测试通过,sqlDemo源码见 sqlDemo (git clone https://github.com/iove1123/sqlDemo.git)。
1. 创建数据库my_db,数据表Persons,并插入两条数据到表中。
create.php
<?php $con = mysql_connect("localhost","root","123456"); //连接MySQL数据库服务器 if (!$con){ die('Could not connect: ' . mysql_error()); } if (mysql_query("CREATE DATABASE my_db",$con)){ //创建my_db数据库 echo "Database created"; } else{ echo "Error creating database: " . mysql_error(); } // Create table in my_db database mysql_select_db("my_db", $con); //连接my_db数据库 $sql = "CREATE TABLE Persons ( personID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(personID), FirstName varchar(15), LastName varchar(15), Age int )"; if (mysql_query($sql,$con)){ //创建Persons数据表 echo "Datatable created"; } else{ echo "Error creating datatable: " . mysql_error(); } //向Persons表中插入一行数据 mysql_query("INSERT INTO Persons (FirstName, LastName, Age) VALUES ('Peter', 'Griffin', '35')"); //向Persons表中插入一行数据 mysql_query("INSERT INTO Persons (FirstName, LastName, Age) VALUES ('Glenn', 'Quagmire', '33')"); mysql_close($con); //断开MySQL服务器连接 ?>
在phpMyAdmin中可以看到已经创建成功:
2. 通过表单让用户输入数据,并将用户所输入的表单数据存储到已有的persons表中
form.html
<!DOCTYPE html> <html> <head> <title>Submit</title> </head> <body> <form action="insert.php" method="post"> Firstname: <input type="text" name="firstname" /> Lastname: <input type="text" name="lastname" /> Age: <input type="text" name="age" /> <input type="submit" /> </form> </body> </html>
insert.php
<?php $con = mysql_connect("localhost","root","123456"); if (!$con){ die('Could not connect: ' . mysql_error()); } mysql_select_db("my_db", $con); $sql="INSERT INTO Persons (FirstName, LastName, Age) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]')"; if (!mysql_query($sql,$con)){ die('Error: ' . mysql_error()); } echo "1 record added"; mysql_close($con) ?>
在浏览器中运行的结果:
点击提交按钮后,页面跳转到insert.php页面:
可以看到phpMyAdmin中数据表已经同步更新了数据:
3. SWOUD操作
融合了 select、where、order by、update、delete语句的综合性操作。代码实现如下:
swoud.php
<?php $con = mysql_connect("localhost","root","123456"); if (!$con){ die('Could not connect: ' . mysql_error()); } mysql_select_db("my_db", $con); echo "选取存储在 Persons 表中的所有数据:"; $result1 = mysql_query("SELECT * FROM Persons"); disTable($result1); echo "从 Persons 表中选取所有 FirstName='Peter' 的行:"; $result2 = mysql_query("SELECT * FROM Persons WHERE FirstName='Peter'"); disTable($result2); echo "选取 Persons 表中的存储的所有数据,并根据 Age 列对结果进行排序"; $result3 = mysql_query("SELECT * FROM Persons ORDER BY age"); disTable($result3); echo "将 Persons 表中Peter的年龄改为36,并将表中数据重新输出"; mysql_query("UPDATE Persons SET Age = '36' WHERE FirstName = 'Peter' AND LastName = 'Griffin'"); $result4 = mysql_query("SELECT * FROM Persons"); disTable($result4); echo "将 Persons 表中Trump的数据删除,并将表中数据重新输出"; mysql_query("DELETE FROM Persons WHERE Firstname='Trump'"); $result5 = mysql_query("SELECT * FROM Persons"); disTable($result5); mysql_close($con); //定义打印表格输出函数 function disTable($result){ echo "<table border='1' style='border-collapse:collapse;background-color: #efefef;margin:20px;'> <tr style='background-color: #d5d5d5;'> <th>personID</th> <th>Firstname</th> <th>Lastname</th> <th>Age</th> </tr>"; while($row = mysql_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['personID'] . "</td>"; echo "<td>" . $row['FirstName'] . "</td>"; echo "<td>" . $row['LastName'] . "</td>"; echo "<td>" . $row['Age'] . "</td>"; echo "</tr>"; } echo "</table>"; echo "<br/>"; } ?>
实际页面效果如下。