<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;", $username, $password);
echo "连接成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
或
<?php
/*数据库配置*/
$dbconfig = array(
'host' => 'localhost', //数据库服务器
'port' => 3306, //数据库端口
'user' => 'username', //数据库用户名
'pwd' => 'password', //数据库密码
'dbname' => 'dbname' //数据库名
);
// 检测链接
try {
// 创建链接
$conn = new PDO("mysql:host=" . $dbconfig['host'] . ";dbname=" . $dbconfig['dbname'] . ";port=" . $dbconfig['port'], $dbconfig['user'], $dbconfig['pwd']);
// 设置 PDO 错误模式,用于抛出异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功";
} catch (PDOException $e) {
echo $e->getMessage();
}
// 关闭数据库链接
// $conn = null;
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 默认输出
var_dump($stmt);
} catch (PDOException $e) {
echo $e->getMessage();
}
PDO+预处理
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// prepare+execute用于预处理,使sql语句灵活了很多,也可用防止SQL注入等问题。
$stmt = $conn->prepare($sql);
$stmt->execute();
// 默认输出
var_dump($stmt);
} catch (PDOException $e) {
echo $e->getMessage();
}
以上俩种均可读取数据库数据,但是query()
用于简单查询,而prepare()
强大安全。
参数 | 说明 |
---|---|
PDO::FETCH_ASSOC | 从结果集中获取以列名为索引的关联数组。 |
PDO::FETCH_NUM | 从结果集中获取一个以列在行中的数值偏移量为索引的值数组。 |
PDO::FETCH_BOTH | 默认值,包含以上两种数组。 |
PDO::FETCH_OBJ | 从结果集当前行的记录中获取其属性对应各个列名的一个对象。 |
PDO::FETCH_BOUND | 使用fetch()返回TRUE,并将获取的列值赋给在bindParm()方法中指 定的相应变量。 |
PDO::FETCH_LAZY | 创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。 |
fetch()
方法可以将结果集中当前的记录以某种方式返回,并将结果集指针移至下一行,当到达结果集末尾时返回FALSE。
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 使用fetch()方法,获取关联数组
$res = $stmt->fetch(PDO::FETCH_ASSOC);
// 输出一个关联数组
var_dump($res);
echo '</br></br>';
// 只输出单个值
echo 'id为:' . $res['id'];
echo '</br></br>';
// 循环输出查询到的所有结果并换行
foreach ($res as $v) {
echo $v . '</br>';
}
} catch (PDOException $e) {
echo $e->getMessage();
}
fetchAll()
方法与fetch()
类似,但是该方法只需要调用一次就可以获取结果集中的所有行,并赋给返回的数组(二维)。
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 使用fetchall()方法,获取关联数组
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 输出一个二维数组
var_dump($res);
echo '</br></br>';
// 循环输出查询到的所有结果
foreach ($res as $v) {
echo $v['id'] . '</br>';
echo $v['navname'] . '</br>';
echo $v['navlink'] . '</br>';
echo '</br>';
}
} catch (PDOException $e) {
echo $e->getMessage();
}
fetch()
和fetchAll()
两个方法,数字索引和关联索引都有,属于浪费资源,而setFetchMode()
可以设置结果集的。
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 设置结果集为关联数组
$stmt->setFetchMode(PDO::FETCH_ASSOC);
//fetchAll()方法
$res = $stmt->fetchAll();
// 输出一个二维数组
var_dump($res);
echo '</br></br>';
// 循环输出查询到的所有结果
foreach ($res as $v) {
echo $v['id'] . '</br>';
echo $v['navname'] . '</br>';
echo $v['navlink'] . '</br>';
echo '</br>';
}
} catch (PDOException $e) {
echo $e->getMessage();
}
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 默认获取默认获取当前行的第1列
echo $stmt->fetchColumn();
echo ' </br>';
// 获取当前行第一列
echo $stmt->fetchColumn(1);
} catch (PDOException $e) {
echo $e->getMessage();
}
<?php
// 链接数据库
require_once('conn.php');
try {
// 数据库语句
$sql = "select * from nav";
// 有返回结果集,使用query函数,该函数返回结果为预处理对象。
$stmt = $conn->query($sql);
// 获取总行数、总列数
echo '总行数:' . $stmt->rowCount() . '</br>';
echo '总列数:' . $stmt->columnCount() . '</br>';
} catch (PDOException $e) {
echo $e->getMessage();
}
<?php
// 链接数据库
require_once('conn.php');
// 获取要修改的id
$id = $_GET['id'];
// GET接收要修改的数据
$navname = $_GET['name'];
$navlink = $_GET['link'];
try {
// 插入数据
$sql = "update nav set navname='$navname', navlink='$navlink' where id=$id ";
$conn->exec($sql);
echo '修改成功';
} catch (PDOException $e) {
echo $e->getMessage();
}
<?php
// 链接数据库
require_once('conn.php');
// GET获取插入的数据
$navname = $_GET['name'];
$navlink = $_GET['link'];
try {
// 插入数据
$sql = "insert into nav(navname, navlink) values ('$navname','$navlink')";
$conn->exec($sql);
echo '插入成功';
} catch (PDOException $e) {
echo $e->getMessage();
}
<?php
// 链接数据库
require_once('conn.php');
// GET获取要删除的id
$id = $_GET['id'];
try {
// 插入数据
$sql = "delete from nav where id=$id";
$conn->exec($sql);
echo '删除成功';
} catch (PDOException $e) {
echo $e->getMessage();
}