PHP操作MySQL有多种方法
- mysql扩展(在后面版本会被移除,不推荐使用)
- mysqli扩展
-
PDO扩展
在这里根据慕课网的教程(教程链接),给大家整理了一下mysqli基本的使用方法。
主流PHP框架很多都是采用封装PDO的数据库操作类来操作数据库,等大家以后学习框架后自然会体会到框架操作数据库的快速方便优雅,但是现在以基础为重。
mysqli有面向对象的接口与面向过程的接口,因此有两种使用方式,一种是对象的使用方式,一种是函数的使用方式,大家根据习惯选择自己喜欢的吧,个人比较喜欢面向对象式的。
因为涉及到类简单讲一下类的基本概念,表达能力一般,用代码解释,你们感受下- -。
类是面向对象程序设计的基本概念,通俗的理解类就是对现实中某一个种类的东西的抽象, 比如汽车可以抽象为一个类,汽车拥有名字、轮胎、速度、重量等属性,可以有换挡、前进、后退等操作方法。(以上文字抄自慕课网- -)
类的好处:数据与可以执行的方法一起封装,看起来更清晰,另外可以隐藏具体实现与数据,只对外公开接口。每一个类只需要考虑实现自己的接口,使用类时,只需要知道类提供了哪些接口。
下面只是一个最简单的类,还有更多的特性等待大家去学习。
<?php
class people{
//类里的变量叫类的属性,public是访问修饰符,表示公开
public $name='lucy';
public $age=25;
//类里的function叫类的方法
public function getAction(){
echo '我是一个方法';
}
public function getAge(){
return $this->age;//$this关键字可以理解为对象本身
}
}
$person=new people();//实例化一个类,$person是people这个类的一个实例化对象
echo $person->name;//lucy.输出对象的name属性
$person->getAction();//我是一个方法.调用对象的一个方法.
echo $person->getAge();//25
请自行更改数据库的连接选项
$con=new mysqli('127.0.0.1','root','root','test');
$con=mysqli_connect('127.0.0.1','root','root')
有几个理解点:
- 上述代码的$con你可以理解为PHP与MySQL的一个【连接】
- 下面的$query你可以理解为查询的【结果集】
$query=mysqli_query($con,$sql_1);
//或者
$query=$con->query($sql)
- 下面这些方法或函数就是对你查到的结果集进行操作,让他们以【怎样的形式】展现出来,关联数组?索引数组?对象?
mysqli_fetch_row($query)
//或者
$query->fetch_assoc()
数组
$a=array('id'=>1,'name'=>'zhang');//这是关联数组
$a=array(1=>1,2=>'zhang');//这是索引数组
大家把代码在本地跑一下,结合慕课网或其他教程多用就熟练了
有啥不明白的来问各自组长或者问我吧,讲错的或者代码出错的也请指出。
面向对象的使用方法
<?php
// http://www.imooc.com/video/6759 视频教程在这里
header("Content-type:text/html;charset=utf-8");
/* 连接mysql,有错就打印错误
或者:
$con=new mysqli('127.0.0.1','root','root')
if(!$con->select_db('test')){
echo $con->error;
}
设置编码,防止乱码
或者:
$con=new mysqli();
$con->connect('127.0.0.1','root','root')
*/
$con=new mysqli('127.0.0.1','root','root','test');
if($con->connect_error){
echo $con->error;
die("连接出错,die方法结束进程");
// die('Connect Eroor'.$con->connect_error);
}
// 设置编码,防止乱码
if(!$con->set_charset('utf8')){
echo $con->error;
}
// 创建表test
$sql=<<<EOF
CREATE TABLE IF NOT EXISTS test_table(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
EOF;
if($con->query($sql)){
$query=$con->query("SELECT * FROM test_table");
if($query&&$query->num_rows==0){
$sql="INSERT test_table(username,password)VALUES('zhang','123'),('li','456')";
$con->query($sql);
}
}else{
echo $con->error ;
die("创建表出错");
}
$sql_1="SELECT * FROM test_table";
echo '<h4>mysqli面向对象使用方法</h4>';
echo '<h4>这里只是举了部分常用方法,还有很多请自行看视频或相关手册</h4>';
echo'<h4>以下都是获取查询数据的第一条,如果要获取全部的可以使用循环语句打印出来</h4>';
echo'<h4>在这里,$con是连接标识符,$query是执行的结果集</h4>';
echo'<hr>';
$query=$con->query($sql_1);//执行sql语句,将执行结果赋给一个变量
if($query){
echo '$query->fetch_row():以索引数组的形式获取数据(这个循环打印了)<br><br>';
//循环打印
while ($result=$query->fetch_row()) {
$data[]=$result;
echo 'name:'.$result[0].' '.'password:'.$result[1].'<br>';
}
print_r($data);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_assoc():以关联数组的形式获取数据<br><br>';
$result=$query->fetch_assoc();
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_array(MYSQLI_BOTH):参数不写就是默认以混合数组(索引数组、关联数组)的形式获取数据<br><br>';
$result=$query->fetch_array(MYSQLI_BOTH);//以混合数组形式,参数可写可不写
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_array(MYSQLI_NUM):以索引数组的形式获取数据,等同于$query->fetch_row()<br><br>';
$result=$query->fetch_array(MYSQLI_NUM);
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_array(MYSQLI_ASSOC):以关联数组的形式获取数据,等同于$query->fetch_assoc()<br><br>';
$result=$query->fetch_array(MYSQLI_ASSOC);
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->num_rows:获取结果数目<br><br>';
$result=$query->num_rows;
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo 'mysqli_num_rows:以对象形式获取数据<br><br>';
$result=$query->fetch_object( );
print_r($result);
echo"<br>";
echo $result->id;
echo '<br>';
echo $result->username.'<br>';
echo $result->password.'<br>';
echo '<hr>';
}
echo"<h4>以下选择性看</h4>";
echo 'mysqli_multi_query:执行多条sql语句,注意每句结束的“;”<br><br>';
$sql="INSERT test_table(username,password)VALUES('wang','789'),('hao','101112');";
$sql.="UPDATE test_table SET password='11111111';";
// if($con->multi_query($sql)){
// echo 'multi success';
// };
//
$sql2="SELECT * FROM test_table where id=1;";
$sql2.="SELECT * FROM test_table where id=2";
if($con->multi_query($sql2)){
$rows=array();
echo "success<br>";
do{
if($result=$con->store_result()){
$rows[]=$result->fetch_all(MYSQLI_ASSOC);
}
}while($con->more_results()&&$con->next_result());
}else{
echo $con->error;
}
print_r($rows);
//关闭连接
$con->close();
echo"<h4>预处理和事务处理暂时不需要掌握,请以后自己看视频或者以后有机会讲</h4>";
面向过程的使用方法
<?php
//面向过程
header("Content-type:text/html;charset=utf-8");
//以定义常量的形式定义数据库连接信息,
define('HOST','127.0.0.1');
define('USERNAME', 'root');
define("PASSWORD", 'root');
// 连接mysql,有错就打印错误
if(!($con=mysqli_connect('127.0.0.1','root','root'))){
echo mysqli_error($con);
die("连接MySQL出错");
}
// 选择数据库也可以直接写在connect方法的第四个参数里
if(!mysqli_select_db($con,'test')){
echo mysqli_error($con);
die("选择database出错");
}
// 设置编码,防止乱码
if(!mysqli_query($con,'set names utf8')){
echo mysqli_error($con);
die("设置编码出错");
}
// 创建表test
$sql=<<<EOF
CREATE TABLE IF NOT EXISTS test_table(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
EOF;
if(mysqli_query($con,$sql)){
$query=mysqli_query($con,"SELECT * FROM test_table");
if($query&&mysqli_num_rows($query)==0){
$sql="INSERT test_table(username,password)VALUES('zhang','123'),('li','456')";
mysqli_query($con,$sql);
}
}else{
echo mysqli_error($con);
die("创建表出错");
}
$sql_1="SELECT * FROM test_table";
echo '<h4>mysqli面向过程使用方法</h4>';
echo '<h4>这里只是举了部分常用方法,还有很多请自行看视频或相关手册</h4>';
echo'<h4>以下都是获取查询数据的第一条,如果要获取全部的可以使用循环语句打印出来</h4>';
echo'<h4>在这里,$con是连接标识符,$query是执行的结果集</h4>';
echo'<hr>';
// mysqli_query执行sql语句,第一个参数是mysql连接,第二个参数是sql语句
$query=mysqli_query($con,$sql_1);//执行sql语句,将执行结果赋给一个变量
if($query){
echo 'mysqli_fetch_row($query):以索引数组的形式获取数据(这个循环打印了)<br><br>';
//循环打印
while ($result=mysqli_fetch_row($query)) {
echo 'name:'.$result[0].' '.'password:'.$result[1].'<br>';
$data[]=$result;
}
print_r($data);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_assoc($query):以关联数组的形式获取数据<br><br>';
$result=mysqli_fetch_assoc($query);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_array($query,MYSQLI_BOTH):第二个参数不写就是默认以混合数组(索引数组、关联数组)的形式获取数据<br><br>';
$result=mysqli_fetch_array($query,MYSQLI_BOTH);//以混合数组形式第二个参数可写可不写
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_array($query,MYSQLI_NUM):以索引数组的形式获取数据,等同于mysqli_fetch_row<br><br>';
$result=mysqli_fetch_array($query,MYSQLI_NUM);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_array($query,MYSQLI_NUM):以关联数组的形式获取数据,等同于mysqli_fetch_assoc<br><br>';
$result=mysqli_fetch_array($query,MYSQLI_ASSOC);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_num_rows:获取结果数目<br><br>';
$result=mysqli_num_rows($query);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_object:以对象形式获取数据<br><br>';
$result=mysqli_fetch_object($query);
print_r($result);
echo"<br>";
echo $result->id;
echo '<br>';
echo $result->username.'<br>';
echo $result->password.'<br>';
echo '<hr>';
}
echo"<h4>以下选择性看</h4>";
echo 'mysqli_multi_query:执行多条sql语句,注意每句结束的“;”<br><br>';
$sql="INSERT test_table(username,password)VALUES('wang','789'),('hao','101112');";
$sql.="UPDATE test_table SET password='11111111';";
// if(mysqli_multi_query($con,$sql)){
// echo 'multi success';
// };
//
$sql2="SELECT * FROM test_table where id=1;";
$sql2.="SELECT * FROM test_table where id=2";
if(mysqli_multi_query($con,$sql2)){
$rows=array();
echo "success<br>";
do{
if($result=mysqli_store_result($con)){
$rows[]=mysqli_fetch_all($result,MYSQLI_ASSOC);
}
}while(mysqli_more_results($con)&&mysqli_next_result($con));
}else{
echo mysqli_error($con);
}
print_r($rows);
//关闭连接
mysqli_close($con);
echo"<h4>预处理和事务处理暂时不需要掌握,请以后自己看视频或者以后有机会讲</h4>";