PHP中mysql、mysqli、pdo的区别和用法

平时总是用封装的写法写sql,最基本的数据库连接都快忘了怎么写了。现在回头总结一下PHP连接数据库的一些方法和区别:
MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension。MySQLi 的 i 代表 Improvement ,提供了相对进阶的功能,就 Extension 而言,本身也增加了安全性。而 PDO(PHP Data Object)则是提供了一个 Abstraction Layer 来操作数据库,下面贴代码:

<?php
$host = '127.0.0.1';
$username = 'root';
$userpass = '';
$databases = 'mytest';
$charset = "utf8";

$conn = mysql_connect($host, $username, $userpass);
if (!$conn) {
    die('连接失败'.mysql_error());
}
mysql_set_charset($charset, $conn);//编码要设置的
mysql_select_db($databases. $conn);

$result = mysql_query("SELECT stu_id, c_name, grade FROM score");
$row = mysql_fetch_array($result);

这种方式不能 Bind Column,$location 的地方容易被 SQL 注入。于是后来发展出了 mysql_escape_string()(备注:5.3.0 之后弃用)以及 mysql_real_escape_string() 来解决这个问题,不过这么一搞,整个过程会变得复杂丑陋,而且如果参数多了,可以想象会是怎样的情形……

<?php  
$query = sprintf("SELECT * FROM score WHERE c_name='%s' AND grade='%s'",  
mysql_real_escape_string($c_name),  
mysql_real_escape_string($grade));  
mysql_query($query);  

在 MySQLi 中有了不少进步,除了通过 Bind Column 来解决上述问题

<?php  
$conn = new mysqli($host, $username, $userpass, $databases);  
if (!$conn) {
    die('连接失败'.mysqli_connect_error());
}
mysqli_set_charset($conn, $charset);
$sql = "INSERT INTO `score` (id, stu_id, c_name, grade) VALUES (?, ?, ?, ?)";
$stmt = $conn ->prepare($sql);
$id = '';
$stu_id = '904';
$c_name = '高数';
$grade = '88';

$stmt->bind_param('dsss', $id, $stu_id, $c_name, $grade);//需要用变量传值
$stmt->execute();
echo $stmt->affected_rows; 

下面是PDO:

$pdo = new PDO("mysql:host=$host;dbname=$databases;charset=utf8", $username, "");
$sql = "INSERT INTO `users` (id, stu_id, c_name, grade) VALUES(?, ?, ?, ?)";  
$sth = $pdo->prepare($sql);  
$sth->execute(array(22, '908', '高数', '76')); 
echo $pdo->lastInsertId() . '<br />'; 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值