mysql2 及path配置

u 使用php mysqli扩展库去操作mysql数据库

简单介绍:

mysqli (mysql improve mysql扩展库的增强版)

mysql 扩展库 和  mysqli 扩展库的比较

1. mysqli 的稳定性和安全性,效率有所提高

2. mysqi 支持面向对象编程 ,同时 mysqli 扩展库考虑到php老程序员,提供面向过程的编程风格.

mysqli 有两套编程风格:

appserver 

php版本5.2.x

$mysqli=new MySQLi(“localhost”,”root”,”roo3t”,”test”);

//安照变相对象的方式

if($mysqli->connect_error){

die($mysqli->connect_error);

}

// 考虑兼容低版本

if(mysqli_connect_error()){

die(“连接error”. mysqli_connect_error())

}

u mysqli 编程的快速入门

编写一个程序,这个程序从user1表中读取数据,并打印在网页中。(使用mysqli完成.)

1. 先使用mysqli面向对象的风格,完成案例 

1.1. 配置php.ini 文件让php支持mysqli扩展库

extension=php_mysqli.dll

1.2 建库,建表.

这里我们使用原来的user1.

1.3 编写代码

 <?php

header("Content-type: text/html;charset=utf-8");

//mysqli操作mysql数据库(面向对象风格)

//1.创建MySQLi 对象

$mysqli=new MySQLi("localhost","root","root","test");

//验证是否ok

if($mysqli->connect_error){

die("连接失败".$mysqli->connect_error);

}

//2. 操作数据库(发送sql)

$sql="select * from user1";

//$res 是结果集.mysqli result

$res=$mysqli->query($sql);

//var_dump($res);

//3. 处理结果 mysql_fetch_row();

while($row=$res->fetch_row()){

foreach($row as $key=>$val){

echo "--$val";

}

echo "<br/>";

}

//4. 关闭资源

//释放内存

$res->free();

//关闭连接

$mysqli->close();

?>

我们再使用面向过程的方式给大家演示一下.

代码:

//1.得到mysqli连接

header("Content-type: text/html;charset=utf-8");

$mysqli=mysqli_connect("localhost","root","root","test");

if(!$mysqli){

die("连接失败".mysqli_connnect_error($mysqli));

}

//2.向数据库发送sql语句(ddl,dml dql ...) 

$sql="select * from user1";

$res=mysqli_query($mysqli,$sql);

//var_dump($res);

//3.处理得到的结果

//循环取出$res中的数据mysqli_fetch_row mysql_fetch_row

while($row=mysqli_fetch_row($res)){

foreach($row as $key=>$val){

echo "--$val";

}

echo "<br/>";

}

//4.关闭资源

mysqli_free_result($res);

mysqli_close($mysqli);

☞ 在mysqli 扩展中,也提供了四种方式来获取mysqli result结果集mysqli_result::fetch_assoc <==>    mysql_fetch_assoc

mysqli_result::fetch_row  <==>    mysql_fetch_row

mysqli_result::fetch_array <===> mysql_fetch_array

mysqli_result::fetch_object<===> mysql_fetch_object

这里我们推荐大家使用前两种效率较高 

☞ 在mysqli释放结果集有三种方式:

void mysqli_result::free ( void )

void mysqli_result::close ( void )

void mysqli_result::free_result ( void )

☞ mysql sql 语句的特别说明:

如果操作的字段类型是 string型,则要求我们的 要用 ‘’ 包括。

如果操作的字段类型是 数值型,则可以用 ’80’ 包括,也可以不用

u mysqli的增强-批量执行sql语句

批量执行 dml语句

基本语法

$sqls=”sql1;sql2;...”
mysqli::multi_query($sqls)

体验案例: PHP 网站

请使用mysqlimysqi::multi_query() 一次性添加三个用户 宋江 卢俊义 吴用

代码:

<?php

//请使用mysqlimysqi::multi_query() 一次性添加三个用户 宋江 卢俊义 吴用

//1.得到mysqli对象

$mysqli=new MySQLi("localhost","root","hsp123","test");

if($mysqli->connect_error){

die($mysqli->connect_error);

}

$sqls="insert into user1 (name,password,email,age) values('宋江','aaa','[email protected]',45);";

$sqls.="insert into user1 (name,password,email,age) values('卢俊义','aaa','[email protected]',45);";

$sqls.="insert into user1 (name,password,email,age) values('吴用','aaa','[email protected]',45);";

//$sqls.="update ;";

//$sqls.="delete ;";

//dml 和 dql

$b=$mysqli->multi_query($sqls);

if(!$b){

echo "执行失败".$mysqli->error;

}else{

echo "ok";

}

//关闭资源

$mysqli->close();

?>

☞ 批量执行dml语句可以混合使用 delete insert update,但是最好不要使用select

u 批量执行 dql语句

它的作用是可以一次性的取回多个结果集

<?php

//练习2: 请使用mysqlimysqi::multi_query() 一次性查询并显示①users表的结构 、 ② users表中用户id ,和用户名字

//1.得打mysqli对象(究竟是什么 代表的是和mysql数据库的连接. $conn)

$mysqli=new MySQLi("localhost","root","hsp123","test");

//2.批量查询

$sqls="select * from emp;";

$sqls.="select * from user1;";

$sqls.="desc user1";

//3.处理结果

//如果成功,则至少有一个结果集

$mysqli 对象 中 $mysqli result   数组

if($res=$mysqli->multi_query($sqls)){

do{

//mysqli连接取出第一个结果集

$result=$mysqli->store_result();

//显示mysqli result对象

while($row=$result->fetch_row()){

foreach($row as $key => $val){

echo "--$val";

}

echo "<br/>";

}

//及时释放$result;

$result->free();

if(!$mysqli->more_results()){

break;

}

echo "<br/>******新的结果集*******<br/>";

}while($mysqli->next_result());

}

//4.关闭资源

$mysqli->close();

?>

u mysql的事务处理

看一个实际情况

有一张银行账号表

create table account 

(id int primary key,

balance float);

现在有一段php程序要完成 把 1号 10 元钱,转到 2号账号上

<?php

$mysqli=new MySQLi("localhost","root","hsp123","test");

if($mysqli->connect_error){

die($mysqli->connect_error);

}

$sql1="update account set balance=balance-2 where id=1";

$sql2="update account2 set balance=balance+2 where id=2";

$b1=$mysqli->query($sql1) or die($mysqli->error);

$b2=$mysqli->query($sql2) or die($mysqli->error);

if(!$b1||!$b2){

echo "失败";

}else{

echo "成功";

}

$mysqli->close();

?>

这时,我们需要有一种方法来控制两句sql语句同时成功,同时失败.

->事务 

u 事务

基本:事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用以保证数据的一致性

现在我们使用事务来完成上面的代码

代码:

<?php

$mysqli=new MySQLi("localhost","root","hsp123","test");

if($mysqli->connect_error){

die($mysqli->connect_error);

}

//将提交设为false[事务一旦提交就没有机会回滚.]

$mysqli->autocommit(false);

//-> savepoint a;会把但前情况记录

$sql1="update account set balance=balance-2 where id=1";

$sql2="update account2 set balance=balance+2 where id=2";

$b1=$mysqli->query($sql1) ;

$b2=$mysqli->query($sql2) ;

if(!$b1||!$b2){

echo "失败,回滚".$mysqli->error;

//回滚!

$mysqli->rollback();

}else{

//提交[一旦提交没有机会回滚]

$mysqli->commit();

}

$mysqli->close();

//显示控制台

?>

☞ 在mysql控制台可以使用事务来操作,具体步骤如下

1. 开启一个事务

start transaction

2. 做保存点

savepoint 保存点名称

3. 操作....

4. 可以回滚,可以提交

4.1 如果没有问题提交

commit

4.2 如果你觉得有问题,就回滚

rollback to 保存点.

u 事务的acid特性

原子性,一致性,持久性,隔离性.

--上次课没有拷贝过来的代码

<?php

$mysqli=new MySQLi("localhost","root","hsp123","test");

if($mysqli->connect_error){

die($mysqli->connect_error);

}

//将提交设为false[事务一旦提交就没有机会回滚.]

$mysqli->autocommit(false);

//-> savepoint a;会把但前情况记录

$sql1="update account set balance=balance-2 where id=1";

$sql2="update account2 set balance=balance+2 where id=2";

$b1=$mysqli->query($sql1) ;

$b2=$mysqli->query($sql2) ;

if(!$b1||!$b2){

echo "失败,回滚".$mysqli->error;

//回滚!

$mysqli->rollback();

}else{

//提交[一旦提交没有机会回滚]

$mysqli->commit();

}

$mysqli->close();

//显示控制台

?>



在path进行配置:



把MySQL的bin路径设置到环境变量里的path变量值里,就可以直接在cmd里输入程序名称来运行它;
也可以在cmd里跳转到那个bin目录下,在执行 ./程序名称 ,也可以运行这个程序

你可能感兴趣的:(mysql2 及path配置)