我有关于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连接? 感谢。
答案 0 :(得分:2)
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);
}
}
如您所见,每次拨打bind_result
时使用fetch
变量$name
,$countryCode
,$district
会自动填充来自当前结果行。您必须确保一些细节,请阅读the documentation以获取更多信息。
要回答您的其他问题:您不需要,并且确实在每次查询后不得关闭连接(除非您非常清楚自己在做什么)。
答案 1 :(得分:0)
bind_result
指定要写入数据的变量。你可以保持连接打开。只需确保在$stmt->fetch()
$stmt->bind_result($district);
在这里查看示例#1: http://www.php.net/manual/en/mysqli-stmt.bind-result.php