Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于mysqli准备的声明的问题_Php_Mysql - Fatal编程技术网

Php 关于mysqli准备的声明的问题

Php 关于mysqli准备的声明的问题,php,mysql,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($distric

我对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\u result指定要写入数据的变量。你可以保持连接打开。只需确保调用$stmt->fetch after$stmt->bind\u result$district

在这里查看示例1:

bind\u result使您在迭代查询结果时,结果集中的列自动映射到局部变量

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

$query = "SELECT Name, CountryCode, District FROM myCity";
$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);
    }
}
您希望执行查询并对结果进行处理,比如说打印结果:

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";
$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变量$name、$countryCode、$district时,使用bind_result时,都会自动使用当前结果行中的值填充变量$name、$countryCode、$district。有一些细节,你必须确保,阅读更多信息

回答你的另一个问题:你不需要这样做,事实上,除非你非常清楚自己在做什么,否则你不能在每次查询后关闭连接