【Php操做Mysql数据库】php
在PHP脚本中操做MySQL数据库的的六个步骤以下:html
1.链接MySQL数据库服务器并判断是否链接正确mysql
2.选择数据库sql
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】
PHP的mysqli扩展提供了其先行版本的全部功能,此外,因为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 == 1 ? true : false;
//下移,第二条SQL
$_mysqli->next_result();
//获取第二条SQL影响的行数
$_success2 = $_mysqli->affected_rows == 1 ? true : false;
//判断是否都正常经过了,两个SQL
if ($_success &&$_success2) {
$_mysqli->commit();
echo '完美提交!';
} else {
$_mysqli->rollback();
echo '程序出现异常!';
}
} else {
echo "SQL语句有误:".$_mysqli->errno.$_mysqli->error;
}
//最后还必须开启自动提交
$_mysqli->autocommit(true);