目录

PHP 连接到 MySQL


PHP 5 及更高版本可以使用 MySQL 数据库:

  • MySQLi 扩展("i" 代表改进)
  • PDO(PHP 数据对象)

PHP 的早期版本使用 MySQL 扩展。然而,该扩展已于 2012 年被弃用。


我应该使用 MySQLi 还是 PDO?

如果您需要简短的答案,那就是"Whatever you like"。

MySQLi 和 PDO 都有各自的优点:

PDO 可在 12 种不同的数据库系统上运行,而 MySQLi 仅可在 MySQL 数据库上运行。

因此,如果您必须切换项目以使用另一个数据库,PDO 可以使该过程变得简单。您只需更改连接字符串和一些查询。使用 MySQLi,您将需要重写整个代码 - 包括查询。

两者都是面向对象的,但 MySQLi 还提供了过程 API。

两者都支持准备好的语句。准备好的语句可防止 SQL 注入,对于 Web 应用程序安全非常重要。


MySQLi 和 PDO 语法的 MySQL 示例

在本章和接下来的章节中,我们将演示使用 PHP 和 MySQL 的三种方法:

  • MySQLi(面向对象)
  • MySQLi(过程式)
  • 磷酸二氢钾

MySQLi安装

对于 Linux 和 Windows:在大多数情况下,安装 php5 mysql 软件包时会自动安装 MySQLi 扩展。

有关安装详细信息,请访问:http://php.net/manual/en/mysqli.installation.html


PDO安装

有关安装详细信息,请访问:http://php.net/manual/en/pdo.installation.html



打开与 MySQL 的连接

在我们访问 MySQL 数据库中的数据之前,我们需要能够连接到服务器:

示例(MySQLi 面向对象)

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>

请注意上面面向对象的示例:

$connect_error 在 PHP 5.2.9 和 5.3.0 之前被破坏。如果需要确保与 5.2.9 和 5.3.0 之前的 PHP 版本兼容,请改用以下代码:

// 检查连接
如果(mysqli_connect_error()){
die("Database connection failed: " .mysqli_connect_error());
}

示例(MySQLi 过程)

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

示例(PDO)

<?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
  $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connected successfully";
} catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>

笔记:在上面的 PDO 示例中,我们还指定数据库(myDB)。 PDO 需要连接到有效的数据库。如果未指定数据库,则会引发异常。

提示:PDO 的一个很大的好处是它有一个异常类来处理我们数据库查询中可能出现的任何问题。如果在 try{ } 块内引发异常,脚本将停止执行并直接转到第一个 catch(){ } 块。


关闭连接

当脚本结束时,连接将自动关闭。要之前关闭连接,请使用以下命令:

MySQLi 面向对象:

$conn->close();

MySQLi 程序:

mysqli_close($conn);

原产地保护组织:

$conn = null;