PDO 和 MySQLi 准备好的语句有什么区别?

问题描述 投票:0回答:2

这两个

prepared
陈述有什么区别?

1

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array('name' => $name));

foreach ($stmt as $row) {
    // do something with $row
}

2

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

我查了很多关于准备好的陈述的课程,但我唯一理解的是第二种方式,因为它可以用程序编写,这不是和PDO一样吗?因为它们都是准备好的语句?它们之间有速度差异或易用性吗?我学习了第二种方法,因为我认为PreparedStatment = PDO,但当我知道它不是PDO时,我很震惊,使用

mysqli_prepare
mysqli_stmt_bind_param
mysqli_stmt_execute
mysqli_stmt_bind_result
php mysqli pdo
2个回答
6
投票

差异如下:-

  1. Mysqli
    仅适用于MySQL数据库。
    PDO
    支持其他数据库使用相同的功能。

  2. Mysqli
    可以用于面向对象风格或过程风格。
    PDO
    始终是面向对象的。

  3. Mysqli
    支持带有
    ?
    参数占位符的准备好的语句。
    PDO
    支持
    ?
    占位符和命名占位符,例如
    :columnName

  4. Mysqli
    要求您使用函数将每个参数值绑定到准备好的语句。
    PDO
    还允许您在执行准备好的语句时简单地传递参数值数组。


0
投票

PDO(PHP 数据对象)和 MySQLi(MySQL 改进版)都是 PHP 扩展,提供与数据库交互的方法,包括使用准备好的语句安全高效地执行 SQL 查询的能力。但是,它们在实现和功能方面存在一些差异:

1。数据库支持:

  • PDO:PDO是一个数据库抽象层,支持多种数据库系统,包括MySQL、PostgreSQL、SQLite、Oracle等。它允许您通过更改连接参数轻松地在不同数据库系统之间切换。
  • MySQLi:MySQLi 特定于 MySQL 数据库。它提供了一个过程化和面向对象的接口来使用 MySQL 数据库。

2。 API风格:

  • PDO:为数据库操作提供面向对象的接口。
  • MySQLi:提供面向过程和面向对象的接口,使开发人员可以更灵活地选择自己喜欢的编码风格。

3.准备陈述:

  • PDO 和 MySQLi 都支持预准备语句,这是一种执行参数化查询以防止 SQL 注入的机制。

4.绑定参数:

  • PDO:使用命名占位符
    :
    ?
    占位符来绑定参数,使代码更具可读性。例如:
    :username
  • MySQLi:使用问号占位符来绑定参数,需要使用特定的方法来绑定变量。例如:
    ?

5 错误处理:

  • PDO:通过异常提供一致的错误处理。它会抛出连接错误和 SQL 错误的异常,从而更容易管理错误。
  • MySQLi:提供过程式和面向对象式的错误处理。它可以在面向对象模式下抛出 SQL 错误异常。

6.获取数据:

  • PDO:提供一致的
    fetch()
    方法来获取数据,以各种格式返回结果(关联数组、对象等)。
  • MySQLi:提供更多用于获取数据的选项,包括
    fetch_assoc()
    fetch_object()
    fetch_row()
    等。

7.命名交易:

  • PDO:支持命名事务,这在管理复杂事务时很有用。
  • MySQLi:提供标准事务支持,但没有命名事务。

8.一个查询中的多个语句:

  • PDO:支持在单个查询中执行多个语句。
  • MySQLi:支持多语句执行,但需要启用特定选项。
© www.soinside.com 2019 - 2024. All rights reserved.