【问题标题】:Must I close a prepared statement before or after I used the result in PHP [duplicate]我必须在 PHP 中使用结果之前或之后关闭准备好的语句 [重复]
【发布时间】:2014-02-01 15:24:23
【问题描述】:

我必须在使用结果之前关闭 stmt 语句:

$stmt = $mysqli->prepare("SELECT * FROM families WHERE famname = ?");
$stmt->bind_param('s', $e);
$result = $stmt->execute();
$stmt->close(); //closing statement before using $result
return mysqli_num_rows($result);

或者使用后:

$stmt = $mysqli->prepare("SELECT * FROM families WHERE famname = ?");
$stmt->bind_param('s', $e);
$result = $stmt->execute();
return mysqli_num_rows($result);
$stmt->close(); //closing statement after using $result

哪一个更安全,可以同时工作,您建议使用哪一个。

之后 之前

【问题讨论】:

  • 第一个选项是正确的。
  • 实际上都不是。这两种说法都行不通。您需要学习常规的 mysqli 语法 BEFORE 在复杂语句中尝试它。
  • 更不用说你不应该只选择所有记录来计算它们。
  • @YourCommonSense 为什么其中一个不起作用?

标签: php mysql mysqli prepared-statement


【解决方案1】:

如果您执行return,则该函数将不会在此之后继续运行语句,因此您在看到return 语句之后的任何内容都不会执行任何操作。

因此第一个选项是唯一有效的,第二个等于一段没有任何关闭语句的代码。

【讨论】:

    【解决方案2】:

    第一个选项是正确的。如果你返回,那么下面的返回语句将不会被执行。

    所以

    $stmt = $mysqli->prepare("SELECT * FROM families WHERE famname = ?");
    $stmt->bind_param('s', $e);
    $result = $stmt->execute();
    $stmt->close(); //closing statement before using $result
    return mysqli_num_rows($result);
    

    这将关闭$stmt 并返回数据。

    您的第二个选择:

    $stmt = $mysqli->prepare("SELECT * FROM families WHERE famname = ?");
    $stmt->bind_param('s', $e);
    $result = $stmt->execute();
    return mysqli_num_rows($result);
    $stmt->close(); //closing statement after using $result
    

    它永远不会执行$stmt->close();,因为它会在执行之前返回。

    【讨论】:

    • 谁能解释一下为什么它被否决了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2015-05-11
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多