phpboot使用mysql_php操作MySQL数据库的方法和解析

对于许多web应用程序而言,数据库都是其核心所在。数据库几乎可以用来存储所有你想要检索和更新的任何信息

下面介绍两种数据库的访问方式:

①. MySQLi 访问MySQLi (面向对象)数据库,其中MYSQLi又分为 面向对象 和 面向过程两种形式

②. PDO访问MYSQL数据库

MySQLi 和 PDO那个更好???

MySQLi 和 PDO 各有优势

1.MySQLi只针对MySQL数据库,PDO支持12种数据库

2.两者都是面向对象, 但 MySQLi 还提供了 API 接口

3.两者都支持预处理语句。 预处理语句可以防止 SQL 注入,对于 web 项目的安全性是非常重要的。

下面实例来展示一下它们的不同之处:

先创建数据库和表

create database regist;usedatabase

CREATE TABLE `user` (

`name` varchar(255) NOT NULL,`pass` varchar(255) NOT NULL,PRIMARYKEY(`name`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

定义数据库连接所需的参数

$servername="localhost";//数据库服务器主机名

$user="root";//数据库连接用户名

$pass="root";//数据库连接密码

$dbname="regist";//选用的数据库名

?>

1.MySQLi (面向对象) 连接

//$conn=new mysqli($servername,$user,$pass,$dbname);

//连接时不指定数据库名

$conn=new mysqli($servername,$user,$pass);if(!$conn){die("数据库连接失败" . mysqli_connect_error());

}else{//弹出消息提示框

echo "";

}//注:执行query()方法返回的是一个Statement对象,表示执行成功或执行失败

//设置数据库输出为utf8编码

// mysqli_query($conn,"set names 'utf8'");

$conn->query("set names 'utf8'");//选择数据库

$conn->select_db($dbname);//增加

$sql="insert into user(name,pass) values('aa','1234')";//$stmt=mysqli_query($conn,$sql);

$stmt=$conn->query($sql);if($stmt){echo "插入成功"."
";

}//修改

$sql="update user set pass='123456' where name='aa'";//$stmt=mysqli_query($conn,$sql);

$stmt=$conn->query($sql);if($stmt){echo "修改成功"."
";

}//查询

$sql="select*from user";//$stmt=mysqli_query($conn,$sql);

$result=$conn->query($sql);if($result->num_rows>0){while($row=$result->fetch_assoc()){echo "查询结果:"."name: " . $row["name"]. ", pass: " . $row["pass"]."
";

}

}echo "结果集行数为:".$result->num_rows."
";//删除

$sql="delete from user where name='aa'";//$stmt=mysqli_query($conn,$sql);

$stmt=$conn->query($sql);if($stmt){echo "删除成功"."
";

}//关闭数据库

// mysqli_close($conn);

$conn->close();echo "已关闭!!";?>浏览器显示结果:

插入成功

修改成功

查询结果:name: aa, pass: 123456结果集行数为:1删除成功

已关闭!!

2.MySQLi (面向过程) 连接

//$conn=mysqli_connect($servername,$user,$pass,$dbname);

//连接时不指定数据库名

$conn=mysqli_connect($servername,$user,$pass);if(!$conn){die("数据库连接失败" . mysqli_connect_error());

}else{//弹出消息提示框

echo "";

}//执行query()方法返回的是一个Statement对象,表示执行成功或执行失败

//设置数据库输出为utf8编码

mysqli_query($conn,"set names 'utf8'");//$conn->query("set names 'utf8'");

//选择数据库

$conn->select_db($dbname);//增加

$sql="insert into user(name,pass) values('aa','1234')";$stmt=mysqli_query($conn,$sql);//$stmt=$conn->query($sql);

if($stmt){echo "插入成功"."
";

}//修改

$sql="update user set pass='123456' where name='aa'";$stmt=mysqli_query($conn,$sql);//$stmt=$conn->query($sql);

if($stmt){echo "修改成功"."
";

}//查询

$sql="select*from user";$result=mysqli_query($conn,$sql);//$result=$conn->query($sql);

//判断结果集行数是否大于0

if($result->num_rows>0){//检索结果集的下一行,将检索的结果放到关联数组中,并通过while()循环输出结果集

while($row=$result->fetch_assoc()){echo "查询结果:"."name: " . $row["name"]. ", pass: " . $row["pass"]."
";

}

}echo "结果集行数为:".$result->num_rows."
";//删除

$sql="delete from user where name='aa'";$stmt=mysqli_query($conn,$sql);//$stmt=$conn->query($sql);

if($stmt){echo "删除成功"."
";

}//关闭数据库

mysqli_close($conn);//$conn->close();

echo "已关闭!!";?>浏览器显示结果:

插入成功

修改成功

查询结果:name: aa, pass: 123456结果集行数为:1删除成功

已关闭!!

3.PDO连接

$conn=new PDO("$dbtype:host=$servername;dbname=$dbname",$user,$pass);//弹出消息提示框

echo "";//注:执行exec()方法PDOStatement对象,表示执行成功或执行失败

//设置数据库输出为utf8编码

$conn->exec("set names 'utf8'");//增加

$sql="insert into user(name,pass) values('aa','1234')";$stmt=$conn->exec($sql);if($stmt){echo "插入成功!"."
";

}//修改

$sql="update user set pass='123456' where name='aa'";$stmt=$conn->exec($sql);if($stmt){echo "修改成功!"."
";

}//查询

$sql="select*from user";$result=$conn->query($sql);if($result->rowCount()>0){while($row=$result->fetch()){echo "查询结果:"."name: " . $row["name"]. ", pass: " . $row["pass"]."
";

}

}echo "结果集行数为:".$result->rowCount()."
";//删除

$sql="delete from user where name='aa'";$stmt=$conn->exec($sql);if($stmt){echo "删除成功!"."
";

}//关闭数据库

$stmt=$conn = null;if($stmt){echo "已关闭!"."
";

}

}catch(PDOException $e){print "error!".$e->getMeddage();

}?>浏览器显示结果:

插入成功

修改成功

查询结果:name: aa, pass: 123456结果集行数为:1删除成功

已关闭!

MySQLi和PDO在连接数据库上的不同

一.

①.MySQLi仅针对MYSQL数据库,所以在连接数据库时无需指定数据库类型(就一种数据库,哪还有什么类型可选,直接就默认为MySQL啦!)

②.PDO支持多种数据库的访问,所以在连接数据库时必须指定数据库类型,不然会报错(PDO可以访问那么多种数据库,你不指定鬼知道你要访问哪种类型的数据库呀!)

二.

①.MySQLi连接数据库时,可以指定数据库名,也可以不指定数据库名

②.PDO连接数据库时,必须指定数据库名,不然会报错

MySQLi面向对象和面向过程方式的异同

一.

MySQLi面向对象:$conn=new mysqli($servername,$user,$pass);

MySQLi面向过程:$conn=mysqli_connect($servername,$user,$pass);

我也刚开始学PHP访问数据库,所以我除了它们的连接上有明显区别之外,还没发现MySQLi面向对象 和 MySQLi面向过程的其他不同之处!!!

刚开始的时候,我发现别人在

使用MySQLi面向对象方式连接数据库时,都是使用$conn->query($sql)来执行sql语句的;

使用$conn->close()来关闭数据库。

使用MySQLi面向过程方式连接数据库时,都是用mysqli_query($conn,$sql)来执行sql语句的;

使用mysqli_close($conn)来关闭数据库。

但是在尝试上面的实例时,我发现

不管是MySQLi面向对象还是MySQLi面向过程都可以使用$conn->query($sql)或mysqli_query($conn,$sql)来执行sql语句;

使用$conn->close()或mysqli_close($conn)来关闭数据库

一直以来都以为$conn->query($sql)是MySQLi面向对象专用的,mysqli_close($conn)是MySQLi面向过程专用的,没想到不是!

我想了解这其中的区别?希望有那位了解的大佬能告诉我,谢谢!

PDO执行sql语句所用方法解析

一.

①.当执行insert,update,delete等没有返回结果集的查询时,用PDO对象中的exec()方法来执行,执行成功后会返回受影响的行数

注意:exec()方法不能用于执行select查询,因为执行select查询会返回结果集

如:$sql="update user set pass='123456' where name='aa'";$stmt=$conn->exec($sql);print_r($stmt);

浏览器显示:

PDOStatementObject ( [queryString] => update user set pass='123456' where name='aa' )

二.

①. 当执行返回结果集的select查询,则使用PDO对象中的query()方法来执行;

该方法成功执行后,会返回一个结果集,并且可以通过PDOStatement对象中的rowCount()方法来获取返回结果集的行数

如:$sql="select*from user";$result=$conn->query($sql);if($result->rowCount()>0){while($row=$result->fetch()){echo "查询结果:"."name: " . $row["name"]. ", pass: " . $row["pass"]."
";

}

}echo "结果集行数为:".$result->rowCount()."
";

浏览器显示:

查询结果:name: aa, pass: 123456结果集行数为:1

②. MYSQLi访问数据库时,可以通过num_rows来获取返回结果集的行数

如:

$sql="select*from user";$result=$conn->query($sql);//判断结果集行数是否大于0

if($result->num_rows>0){//检索结果集的下一行,将检索的结果放到关联数组中,并通过while()循环输出结果集

while($row=$result->fetch_assoc()){echo "查询结果:"."name: " . $row["name"]. ", pass: " . $row["pass"]."
";

}

}echo "结果集行数为:".$result->num_rows."
";

三.

①. execute()用于执行prepare预处理语句。

在执行prepare预处理语句时,可以使用bindParam()方法来绑定参数,并对参数进行编码,然后给execute()执行。

也可以在执行execute()方法绑定参数

②.1.MySQLi 执行prepare()预处理语句时,使用bind_param()方法来绑定参数

如://预处理sql语句

$stmt=$conn->prepare("insert into user(username,password) values(?,?)");//使用bind_param()方法绑定参数

$stmt->bind_param("ss",$username,$password);//(编辑参数)为绑定的参数赋值

$username='马云';$password='123456';//执行

$stmt->execute();

2.PDO执行prepare()预处理语句时,使用bindParam()方法来绑定数据库

//预处理sql语句

$stmt=$conn->prepare("insert into user(name,pass) values(:name,:pass)");//使用bind_param()函数绑定参数

$stmt->bindParam(':name',$name);$stmt->bindParam(':pass',$pass);//(编辑参数)为绑定的参数赋值

$name='王健林';$pass='1234ab';//执行

$result=$stmt->execute();

3.直接在执行execute()方法时绑定参数

如:

//预处理sql语句

$stmt=$dbh->prepare("select * from user where name=?");执行execute()方法返回的是一个Statement对象,表示执行成功或执行失败

if($stmt->execute(['马云'])){//使用fetch()获取结果集并放到关联数组中

while($row=$stmt->fetch()){echo $row['name']."
";

}echo "行数为:".$count=$stmt->rowcount()."
";

}

PDO获取结果集的方法

①. 获取结果集的的方法。fetch() ,fetchAll() , . . .

1.fetch()

fetch()用于获取结果集的下一行,一次检索一行,然后将获取的数据放到关联的数组中。

2.fetchAll()

fetchAll()方法用于获取结果集中的所有行,其返回值是一个包含结果集中所有数据的二进制数组。

②.结果集的返回方式

众所周知,我们平时获取数组的值时,一般都是通过数字索引或者是其字符串键来获取的

fetch()方法返回结果集的方式是由其参数控制,

参数为为PDO::FETCH_ASSOC,即通过列名作为数组索引来获取

参数为PDO::FETCH_NUM时,通过列号作为索引来获取

参数为PDO::FETCH_BOTH时,即可通过列名来获取也可通过列号来获取,不写参数时,默认为PDO::FETCH_BOTH

参数为PDO::FETCH_BOTH时

如:

//预处理sql语句

$stmt=$conn->prepare("select*from user");//执行execute()函数返回的是一个PDOStatement对象,表示执行成功或失败

$result=$stmt->execute();if($result){//fetch()方法用于获取结果集的下一行,并放入到关联数组,通过while()循环输出结果集

while($row=$stmt->fetch()){//echo $row['name'].", " .$row['pass']."
";

echo $row['0'].", " .$row['1']."
";

}//输出结果集中的行数

echo "行数为:".$count=$stmt->rowcount()."
";

不写参数时默认为PDO::FETCH_BOTH, 此时可通过列名$row['name']来获取结果集, 也可通过列号$row['0']来获取结果集

参数为PDO::FETCH_ASSOC

如:

//预处理sql语句

$stmt=$conn->prepare("select*from user");//执行execute()函数返回的是一个PDOStatement对象,表示执行成功或失败

$result=$stmt->execute();if($result){//fetch()方法用于获取结果集的下一行,并放入到关联数组,通过while()循环输出结果集

while($row=$stmt->fetch(PDO::FETCH_ASSOC)){echo $row['name'].", " .$row['pass']."
";

}//输出结果集中的行数

echo "行数为:".$count=$stmt->rowcount()."
";

参数为PDO::FETCH_ASSOC时,仅可以通过列名$row['name']来获取结果集, 不可以通过列号$row['0']来获取结果集

参数为PDO::FETCH_NUM

如:

//预处理sql语句

$stmt=$conn->prepare("select*from user");//执行execute()函数返回的是一个PDOStatement对象,表示执行成功或失败

$result=$stmt->execute();if($result){//fetch()方法用于获取结果集的下一行,并放入到关联数组,通过while()循环输出结果集

while($row=$stmt->fetch(PDO::FETCH_NUM)){echo $row['0'].", " .$row['1']."
";

}//输出结果集中的行数

echo "行数为:".$count=$stmt->rowcount()."
";

参数为PDO::FETCH_NUM时,仅可以通过列号$row['0']来获取结果集, 不可以通过列名$row['name']来获取结果集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值