使用PHP从Web访问MySQL 数据库
基本步骤
- 检查并过滤来自用户的数据
- 建立一个到适当数据库的链接
- 查询数据库
- 获取查询结果
- 将结果显示给用户
建立一个链接
@ $db = new mysqli('localhost', 'bookorama', 'bookorama456', 'books');
- 面向对象
@ $db = mysqli_connect('localhost', 'bookorama', 'bookorama456', 'books');
- 面向过程
if (mysqli_connect_errno()){
echo ...;
exit;
}
- mysqli_connect_errno() 在连接错误时返回错误号,否则返回0
选择使用的数据库
$db->select_db(dbname);
// or
mysqli_select_db(db_resource, db_name);
查询数据库
$query = 'SELECT * FROM books WHERE '.$searchtype." LIKE '%".$searchterm."%'";
- 查询不需要加分号
$result = $db->query($query);
// or
$result = mysqli_query($db, $query);
- 面向对象返回一个对象,面向过程返回资源版本;
- 执行失败返回 false;
检查查询结果
$num_result = $result->num_rows;
// or
$num_rusult = mysqli_num_rows($result);
// 返回行数
$row = $result->fectch_assoc();
//or
$row = mysqli_fetch_assoc($result);
- 接受结果集合中的每一行,并以一个相关数组返回该行。
- 还$result->fetch_row($result);
返回列举数组 - $row = $result->fetch_object();
$row->title;
断开连接
$result->free();
// or
mysqli_free_result($result);
// then
$db->close;
// or
mysqli_close($db);
将新信息放入到一个数据库
echo $db->affected_rows.' book inserted into database.';
Prepared 语句
- 可以向MySQL 发送一个需要执行的查询模板,然后再单独发送数据
$query = "INSERT INTO books VALUES (?,?,?,?)";
$stmt = $db->prepare($query);
$stmt->bind_param("sssd", $isbn, $author, $title, $price);
$stmt->execute();
echo $stmt->affected_rows.' books inserted into database.';
$stmt->close;
- bind_param() 告诉PHP 那些变量应该被问号所替换。
第一个参数为一个格式化字符串
意味着四个参数分别为string,string,string,double
(其他格式化字符串有i—整数,b—blob) - $stmt->execute() 将真正运行查询
- prepared语句作用
- 改变四个绑定变量的值,并且在不用准备的情况下重新执行这个语句。
- 对于批量插入操作是有用的
- $stmt->bind_result() 提供希望填充结果列的变量列表
- 如:
$stmt->bond_result($isbn, $author, $title, $price);
$stmt->execute();
for (i = 0, i < $stmt->num_rows, i++)
{
$stme->fetch();
echo $isbn;
}
每次调用fetch 时,将获得下一个结果行,并填充到四个绑定变量中;