双重过程和面向对象接口

mysqli 扩展具有双重接口。它支持过程和面向对象的编程范式。

从旧的 mysql 扩展迁移的用户可能更喜欢过程接口。过程接口类似于旧的 mysql 扩展。在许多情况下,函数名称仅在前缀上有所不同。一些 mysqli 函数将其第一个参数作为连接句柄,而旧的 mysql 接口中匹配的函数将其作为可选的最后一个参数。

示例 #1 从旧的 mysql 扩展轻松迁移

<?php
$mysqli
= mysqli_connect("example.com", "user", "password", "database");
$result = mysqli_query($mysqli, "SELECT '请勿在新开发中使用已弃用的 mysql 扩展。' AS _msg FROM DUAL");
$row = mysqli_fetch_assoc($result);
echo
$row['_msg'];

$mysql = mysql_connect("example.com", "user", "password");
mysql_select_db("test");
$result = mysql_query("SELECT '请改用 mysqli 扩展。' AS _msg FROM DUAL", $mysql);
$row = mysql_fetch_assoc($result);
echo
$row['_msg'];

上面的示例将输出

Please do not use the deprecated mysql extension for new development. Use the mysqli extension instead.

面向对象接口

除了经典的过程接口外,用户可以选择使用面向对象接口。文档使用面向对象接口进行组织。面向对象接口显示了按目的分组的函数,使入门更容易。参考部分提供了两种语法变体的示例。

两种接口之间没有明显的性能差异。用户可以根据个人喜好做出选择。

示例 #2 面向对象和过程接口

<?php

$mysqli
= mysqli_connect("example.com", "user", "password", "database");

$result = mysqli_query($mysqli, "SELECT '充满 ' AS _msg FROM DUAL");
$row = mysqli_fetch_assoc($result);
echo
$row['_msg'];

$mysqli = new mysqli("example.com", "user", "password", "database");

$result = $mysqli->query("SELECT '让每个人都满意的选择。' AS _msg FROM DUAL");
$row = $result->fetch_assoc();
echo
$row['_msg'];

上面的示例将输出

A world full of choices to please everybody.

面向对象接口用于快速入门,因为参考部分按这种方式进行组织。

混合风格

可以随时在风格之间切换。出于代码清晰度和编码风格的原因,不建议混合两种风格。

示例 #3 糟糕的编码风格

<?php

$mysqli
= new mysqli("example.com", "user", "password", "database");

$result = mysqli_query($mysqli, "SELECT '可能但风格不好。' AS _msg FROM DUAL");

if (
$row = $result->fetch_assoc()) {
echo
$row['_msg'];
}

上面的示例将输出

Possible but bad style.

参见

添加注释

用户贡献的注释 1 个注释

匿名
9 年前
只想补充一点,过程 mysqli_connect_errno 和 mysqli_connect_error 都不接受任何参数!
https://php.net/manual/de/mysqli.connect-errno.php
https://php.net/manual/de/mysqli.connect-error.php
"int mysqli_connect_errno ( void )"
"string mysqli_connect_error ( void )"
它明确地写着“void”。

将 mysqli 实例作为参数添加会让人看起来像是它从提供的实例中提取错误编号,而实际上并非如此。这可能会导致在连接到多个 SQL 服务器时难以检测到的错误。
这对初学者来说很困惑。
To Top