php - 关于 mysqli 准备好的语句的问题

标签 php mysql

我有关于 mysqli 准备好的语句的基本问题。例如,我想执行一个 SELECT 查询,我应该这样做吗:

<?
$city = "Amersfoort";

if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
    $stmt->bind_param("s", $city);
    $stmt->execute();
    $stmt->bind_result($district);
    $stmt->close();
}
$mysqli->close();
?>

上面的代码中,bind_result也是必须的吗?它到底有什么作用?

此外,我是否需要在每次查询后关闭 mysqli 连接? 谢谢。

最佳答案

bind_result 使得当您迭代查询结果时,结果集中的列会自动映射到局部变量。

例如,假设您执行一个查询,该查询返回包含如下三列的结果集:

$query = "SELECT Name, CountryCode, District FROM myCity";

您想要执行查询并对结果执行某些操作,比如说打印它们:

if ($result = $mysqli->query($query)) {
    while ($row = $result->fetch_row()) {
        printf("%s (%s,%s)\n", $row[0], $row[1], $row[2]);
    }
}

上述代码的“问题”是 $row[0] 描述性不强。另一种方法是使用 bind_result,如下所示:

$query = "SELECT Name, CountryCode, District FROM myCity";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_result($name, $countryCode, $district);

    while ($stmt->fetch()) {
        printf("%s (%s,%s)\n", $name, $countryCode, $district);
    }
}

如您所见,每次调用 fetch 时使用 bind_result 变量 $name$countryCode$district 会自动填充当前结果行中的值。有一些细节您必须确保,请阅读the documentation了解更多信息。

回答您的另一个问题:您不需要,而且实际上您不能在每次查询后关闭连接(除非您非常清楚自己在做什么)。

关于php - 关于 mysqli 准备好的语句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200411/

相关文章:

java - 使程序针对不同的输入运行网站

MySQL 导出到 Outfile 问题

php - 为什么更新查询不起作用?

php - 如何在新行上编写laravel sql查询子句

php - 如何使用php和mysql创建xml文件?

php - 由于设计原因,无法将数据发布给自己

php - ajax 到 php 进行 curl 和返回

php - sleep 连接(mysql)mcrypt

php - 为 foreach 和变量提供的参数无效

php - 使用回调在 Node js 中全局访问变量