使用示例代码从 PHP 连接到 MySQL 的 3 种方法

举报
Tiamo_T 发表于 2021/11/25 21:29:14 2021/11/25
【摘要】 要充分利用 MySQL 数据库,了解如何从自定义 PHP 程序连接到 MySQL 数据库非常重要。 本教程解释了以下三种方法以及适当的示例 PHP 程序,这将解释如何从 PHP 连接到 MySQL 数据库。

要充分利用 MySQL 数据库,了解如何从自定义 PHP 程序连接到 MySQL 数据库非常重要。

本教程解释了以下三种方法以及适当的示例 PHP 程序,这将解释如何从 PHP 连接到 MySQL 数据库。

  • 使用 mysqli 扩展连接(推荐)
  • 使用 PDO 连接(推荐)
  • 使用传统的遗留 mysql_ 函数进行连接(已弃用)

为此,您应该安装 php-mysql 包。

在基于 RedHat 的发行版(包括 CentOS)上,使用 yum 安装 php-mysql,如下所示。

yum install php-mysql

根据您的系统,以上将安装或更新以下依赖项:
php
php-cli
php-common
php-pdo
php-pgsql

安装完成后,phpinfo页面会显示mysql模块,如下图:
PHP MySQL 扩展

对于下面的所有示例,我们将连接到已经存在的 MySQL 数据库。

注意:这里解释的所有内容也适用于 MariaDB,因为它与 MySQL 相同。

1. 使用 mysqli 扩展从 PHP 连接

mysqli 代表 MySQL 改进。

请注意,在大多数发行版(例如:CentOS)上,php-mysqli 已经是 php-mysql 包的一部分。因此,您不必搜索和查找 php-mysqli 包。您所要做的就是安装 php-mysql 包以使 mysqli 扩展在您的系统上运行。

在 Apache DocumentRoot 下创建以下 mysqli.php 文件:

<?php
  $conn = new mysqli("localhost", "root", "mySecretDBpass", "thegeekstuff");
  
  if ($conn->connect_error) {
    die("ERROR: Unable to connect: " . $conn->connect_error);
  } 

  echo 'Connected to the database.<br>';

  $result = $conn->query("SELECT name FROM employee");

  echo "Number of rows: $result->num_rows";

  $result->close();

  $conn->close();
?>

在上面:

  • mysqli - 此函数将使用 mysqli 扩展启动一个新连接。此函数将采用这四个参数
    1. 运行 MySQL 数据库的主机名
    2. 要连接的 MySQL 用户名
    3. mysql 用户的密码
    4. MySQL 数据库连接。
  • 查询功能 - 使用它来指定您的 MySQL 查询。在此示例中,我们从员工数据库中选择姓名列。
  • 最后,我们在结果中显示使用 num_rows 变量选择的行数。我们还关闭了结果和连接变量,如上所示。

当您从浏览器调用上述 mysqli.php 时,您将看到以下输出,这表明 PHP 能够连接到 MySQL 数据库并获取数据。

Connected to the database.
Number of rows: 6

2. 从 PHP MySQL PDO 扩展连接

PDO 代表 PHP 数据对象。

PDO_MYSQL 驱动器实现了 PHP 提供的 PDO 接口,用于从您的 PHP 程序连接到 MySQL 数据库。

在大多数 Linux 发行版(例如:CentOS 和 RedHat)上,php-pdo 包已经是 php-mysql 包的一部分。因此,您不必搜索和查找 php-pdo 包。您所要做的就是安装 php-mysql 包以使 PDO_MYSQL PHP 扩展在您的系统上运行。

在您的 Apache DocumentRoot 下创建以下 mysql-pdo.php 文件:

<?php
  try {
    $conn = new PDO("mysql:host=localhost;dbname=thegeekstuff", "root", "mySecretDBpass");

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo 'Connected to the database.<br>';

    $sql = 'SELECT name FROM employee';
    
    print "Employee Name:<br>";
    foreach ($conn->query($sql) as $row) {
        print $row['name'] . "<br>";
    }
    $conn = null;

  }
  catch(PDOException $err) {
    echo "ERROR: Unable to connect: " . $err->getMessage();
  }
?>

在上面:

  • new PDO – 这将创建一个新的 PDO 对象,它将采用以下三个参数:
    1. mysql 连接字符串:格式为“mysql:host=$hostname;dbname=$dbname”。在上面的例子中,db 运行在 localhost 上,我们正在连接到 Geekstuff 数据库。
    2. 要连接的 MySQL 用户名
    3. mysql 用户的密码
  • $sql 变量 – 创建要执行的 sql 查询。在本例中,我们从员工表中选择姓名列。
  • query($sql) – 在这里我们正在执行我们刚刚创建的 sql 查询。
  • foreach – 在这里,我们循环遍历上述查询命令的输出并将其存储在 $row 变量中,然后我们使用 print 命令显示它。
  • 在 MySQL PDO 中,要关闭连接,只需将 $conn 变量设置为空值。

当您从浏览器调用上述 mysqli.php 时,您将看到以下输出,这表明 PHP 能够连接到 MySQL 数据库并获取数据。

Connected to the database.
Employee Name:
Thomas
Jason
Mayla
Nisha
Randy
Ritu

3. 使用旧版 mysql_ 函数从 PHP 连接(已弃用)

仅当您使用旧版本的 PHP 并且由于某种原因无法将其升级到新版本时才使用此方法。

建议您使用上面显示的方法#2 和方法#3 代替此方法。我包含此方法仅供参考,不作为推荐使用。

自 PHP 5.5 版本起,此特定扩展已被弃用。但是从 PHP 7.0 版本开始,这甚至不起作用,因为它被删除了。

从 PHP 5.5 版本开始,当你使用这些函数时,会产生 E_DEPRECATED 错误。

在 Apache DocumentRoot 下创建以下 mysql-legacy.php 文件:

<?php
$conn = mysql_connect('localhost', 'root', 'mySecretDBpass');
mysql_select_db("thegeekstuff");
if (!$conn) {
die('ERROR: Unable to connect: ' . mysql_error());
}

echo 'Connected to the database.<br>';

$result = mysql_query('SELECT name FROM employee');

$row = mysql_fetch_row($result);
echo "Employee 1: ", $row[0], "<br>\n";

mysql_close($conn);
?>

在上面:

  • mysql_connect 函数接受三个参数:1) 运行 MySQL 数据库的主机名 2) 要连接的 MySQL 用户名 3) mysql 用户的密码。这里它使用用户名 root 及其密码连接到在本地服务器上运行的 MySQL 数据库。
  • mysql_select_db 函数——顾名思义,这将选择您想要连接的数据库。这相当于“使用”命令。在这个例子中,我们连接到数据库 thegeekstuff。
  • mysql_query 函数 – 使用它来指定您的 MySQL 查询。在此示例中,我们从员工数据库中选择姓名列。
  • mysql_fetch_row – 使用此函数从我们刚刚创建的 SQL 查询中获取行。
  • 最后使用 mysql_close 命令关闭连接,如上所示。

当您从浏览器调用上述 mysql-legacy.php 时,您将看到以下输出,这表明 PHP 能够连接到 MySQL 数据库并获取数据。

Connected to the database.
Employee 1: Thomas
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。