PHP学习(四)

Database

在 php5 之前,推荐使用的方式是例如 php_mysql.dll/php_psql.dll 等原生驱动。

比如, php_mysql.dll 的语法如下:

// 首先,设置页面编码
header("Content-Type: text/html; charset=UTF8");

// 其次,建立数据库连接
$conn = mysql_connect("localhost", "root", "root") or die("数据库连接失败");

// 创建数据库
if(mysql_query("create database xxx", $con)) {
    echo "创建数据库成功。";
} else {
    echo "创建数据库失败:" . mysql_error() . "<br>";
}

// 切换到数据库
mysql_select_db("xxx") or dir("打卡数据库失败。");

// 设置 utf8 编码
mysql_query("select names utf8");

// 创建表
$sql = "create table person
(
  id int primary key auto_increment,
  name varchar(20) not null,
  salary float default 1500
)
";
mysql_query($sql);

// 插入数据
mysql_query("insert into person (name, salary) values ('张飞', 3333)");
mysql_query("insert into person (name, salary) values ('关羽', 3334)");

// 查询数据
// 返回结果是:万能的数组
$res = mysql_query("select * from person");

// 显示数据,使用 foreach 循环
echo "<table>\n";
foreach($res as $r) {
    echo "  <tr><td>$r[name]</td><td>$r[salary]</td></tr>\n";
}
echo "\n</table>";

// 最后,释放连接
mysql_close($conn);

因为 mysql 插件有很多问题,所以,后来出现了 php_mysqli.dll 插件,其中 i 代表 improvement(改进/升级) 的意思,对连接数据库的效率及安全性进行了大量优化。

mysqli 插件除了完全兼容 mysql 的语法之外,还支持用 oo 的方式连接数据库:

// 连接数据库
$conn = new mysqli("localhost", "root", "root", "text");
$conn -> query("set names utf8");

// 查询
$sql = $conn->query("select * from person");

// 获取结果
$res = $conn->fetch_array(MYSQLI_ASSOC);

// 显示结果
echo "<table>\n";
echo "<tr><td>" . $res['name'] . "</td><td>" . $res['salary'] . "</td></tr><br>";
echo "</table>";

虽然 mysqli 插件已经非常好用。但是…

php 能连接的数据库可不止 mysql 啊,还有 oracle/sqlserver/postgres/sqlite 等,每个数据库都有自己的插件,都有自己的语法…所以后来,PHP 推出了自己的连接数据库的标准, 即 PDO(PHP Data Object) 接口,对数据库的连接进行了规范。所以,采用 DPO 的所有数据库,语法得到了统一:

// 连接数据库
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "root", "test");

// 操作数据库n
$pdo->exec("set names utf8");
$pdo->exec("create table person ...") or die("创建失败");
$pdo->exec("insert into  person ...") echo and ("插入成功");

// query
$st = $pdo->query("select xxx from yyy");
$rows =  $st->fetch(PDO::FETCH_ASSOC);
print_r($rows);

// 使用 Prepare 的方式进行操作
$stmt = $pdo->prepare("select name from person where id = :id");
$stmt->bindParam(":id", $xxx, PDO::PARAM_INT);
$stmt = $stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);

// 释放链接
$pdo = null;
posted @ 2017-12-27 19:40  冥河守望  阅读(220)  评论(0编辑  收藏  举报
levels of contents