下面是关于PHP PDO操作数据库的攻略:
前置知识
在先介绍示例之前,我们需要先了解一些PHP PDO操作数据库的前置知识:
- PDO是PHP的本地数据访问层(支持多种数据库);
- PDO具有防止SQL注入攻击的能力,并提供了更好的错误处理机制;
- PDO通过PDOStatement对象执行SQL语句。
示例一
下面我们以连接MySQL数据库为例,展示如何通过PHP PDO操作数据库。
首先,我们需要创建一个数据库连接:
<?php
// 连接数据库
$host = 'localhost';
$dbname = 'example';
$username = 'root';
$password = '';
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$options = [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => False,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
上述代码中,我们首先定义了数据库的连接参数,然后使用PDO的构造函数创建了一个$pdo对象,如果连接失败,会显示连接错误信息。
接下来,我们来学习如何执行SQL语句。
查询操作
下面我们以查询操作为例,演示如何执行SQL语句。
<?php
// SQL查询操作
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch()) {
echo $row['name'] . "\n";
}
?>
上述代码中,我们使用PDOStatement::fetch() 函数从结果集中获取一行。
要注意的是,在PDO中有三种获取数据的方式:PDOStatement::fetch(), PDOStatement::fetchAll() 和 PDOStatement::fetchColumn()。这三种方法分别获取单个行,全部行,或者列的单个值。根据需要来选择相应的方法。
插入操作
如果你想要插入一条记录,代码如下:
<?php
// SQL插入操作
$sql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')";
$pdo->exec($sql);
?>
需要注意的是,PDO的PDO::exec() 函数返回的是影响行数,并且不支持绑定参数,使用该函数时需谨慎,防止SQL注入攻击。
示例二
接下来,我们通过SQLite数据库来演示更多操作。
首先,我们还是需要创建一个数据库连接:
<?php
// 连接数据库
$dbname = 'example.db';
$dsn = "sqlite:$dbname";
$options = [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => False,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, '', '', $options);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
接着,我们来演示更多操作:
绑定查询参数
可以使用PDOStatement::bindParam() 或者PDOStatement::bindValue()绑定查询参数。
下面是bindParam()的示例代码:
<?php
// SQL绑定查询参数操作
$stmt = $pdo->prepare('SELECT * FROM users WHERE name = :name');
$stmt->bindParam(':name', $name);
$name = 'John';
$stmt->execute();
$result = $stmt->fetchAll();
?>
上述代码中,我们首先使用PDO::prepare()函数实例化了一个PDOStatement对象,接着使用PDOStatement::bindParam() 函数绑定了$name变量,并把变量$name的值设置为'John',最后通过PDOStatement::fetchAll() 函数获取所有查找的结果。
事务处理
在使用PHP PDO操作数据库时,我们经常需要使用事务来确保原子性操作,错误处理和数据完整性。
下面的代码展示如何使用PDO的beginTransaction()、commit()、和rollBack() 来实现事务处理:
<?php
// PDO事务处理的操作
try {
$pdo->beginTransaction();
$sql = "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')";
$pdo->exec($sql);
$sql = "UPDATE users SET email='john_doe@example.com' WHERE name='John'";
$pdo->exec($sql);
$pdo->commit();
} catch (PDOException $e) {
$pdo->rollBack();
echo "Error: " . $e->getMessage();
}
?>
在上述代码中,我们使用PDO::beginTransaction()开启了一个事务,然后插入一条记录并更新一条记录,最后使用PDO::commit()提交事务,如果提交事务失败则会回滚操作。
结语
以上就是关于PHP PDO操作数据库示例的完整攻略,至此您应该已经掌握如何操作PDO来连接数据库以及执行增删改查等操作。提供给初学者参考和学习。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php pdo操作数据库示例 - Python技术站