我有关于 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/