PHP 5 的使用者可以使用 mysql extension,mysqli 和 PDO_MYSQL 。PHP 7移除了mysql extension,只剩下后面两种选择.
我们推荐使用mysqli或者PDO_Mysql拓展,不推荐在新开发中使用老的mysql拓展,因为它在PHP5.5.0中不再使用并且在PHP7.0中被移除。
这份文档解释了每个API 的术语,帮助我们如何使用API 和了解相关API的信息。
PHP 提供了三种不同的API去连接mysql数据库。下面的示例代码展示了3种不同连接mysql数据库的方式。
mysqli 模式
/*
* mysqli
* 数据库地址,登陆账号,密码,数据库名称
*/
$mysqli = new mysqli("localhost", "root", "", "student");
$sql = "SELECT * FROM tb_user";
$result = $mysqli->query($sql);
$row = $result->fetch_assoc(); // 从结果集中取得一行作为关联数组
echo $row["password"];
/* free result set */
$result->free();
/* close connection */
$mysqli->close();
PDO 方式
/*
* 第一个参数是mysql:host,第二是dbname,第三个账户名,第四个密码
*/
try {
$pdo = new PDO("mysql:host=localhost;dbname=student", "root", "");
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = "select * from tb_user";
echo $sql . "<BR>";
$pdo->query('set names utf8;');
$result = $pdo->query($sql);
$rows = $result->fetchAll();
foreach ($rows as $row) {
$username = $row[1];
$pwd = $row[2];
echo $username;
}
我们推荐使用mysqli或者PDO_Mysql拓展,不推荐在新开发中使用老的mysql拓展,因为它在PHP5.5.0中不再使用并且在PHP7.0中被移除。
设置编码很重要,是utf8而不是uft-8
$conn->set_charset("utf8");
或者这样也可以
$conn->query("set names utf8;");
概念:
有缓存和没有缓存的查询
查询默认使用有缓存的查询。这意味着查询结果马上从Mysql服务器发送到PHP,然后被保存在php解析器内存中。这允许额外的操作像计算行数,移动或者寻找当前的结果指针。它也允许在同样的连接和结果集上进一步查询。缓存模式不好的一面是大的结果集可能需要很大的内存,这些内存一直占用直到结果集被清除或者被释放,这是在请求结束自动进行的。术语存储结果就是用来表示缓存模式,所有结果集马上被保存。
没有缓存的Mysql查询被执行,马上返回一个资源,数据一直等待mysql服务器被连接获取。这是用了更少的内存在php一方,但这回增加服务器的负载。直到所有的结果集从服务器被取走且没有发送建立在同一个连接上的查询。没有缓存的查询也被称为使用结果。
从这些特性可以看出,缓存查询用在当你只希望得到一个有限的结果集和或者在读取结果集前知道返回结果集的行数。没有缓存的查询模式用在当你要返回大量的数据。
因为默认是缓存查询模式,下面的例子将会验证如何去执行没有缓存的查询API。
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
if ($uresult) {
while ($row = $uresult->fetch_assoc()) {
echo $row['Name'] . PHP_EOL;
}
}
$uresult->close();
?>