【问题标题】:Return an array from mysqli stmt query从 mysqli stmt 查询返回一个数组
【发布时间】:2011-01-19 14:13:27
【问题描述】:

我正在尝试将网站转换为使用准备好的 mysql 语句,但是在替换 fetch_array() 的使用时遇到了一些麻烦。

The comments on php.net 提供了一个我认为应该可行的解决方案,但由于某种原因,我在通过call_user_func_array() 调用函数时遇到了奇怪的未定义常量错误,有人可以提出更好的方法吗?

这是我目前正在使用的功能。我已经把它放在这里有点笨拙(它是一个更大的类的一部分,它扩展了 mysqli 并处理错误捕获等),如果我在复制和粘贴时犯了任何错误,很抱歉。

public static function stmt_bind_assoc(&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

    $fields[0] = $stmt;
    $count = 1;

    while($field = mysqli_fetch_field($data)) {
        $fields[$count] = &$out[$field->name];
        $count++;
    }
    call_user_func_array(mysqli_stmt_bind_result, $fields);
}
public function fetch_array($rawQuery) {
    $stmt = $this->prepare($rawQuery);
    $row = array();
    self::stmt_bind_assoc($stmt, $row);
    $result = $stmt->fetch();
    $stmt->free();
    return $result;
}

我得到的错误是:

注意:使用未定义的常量 mysqli_stmt_bind_result - 假定为 'mysqli_stmt_bind_result'

致命错误:调用未定义的方法 mysqli_stmt::free()

【问题讨论】:

    标签: php arrays mysqli fetch call-user-func-array


    【解决方案1】:
     $servername = "localhost"; $username = "root"; $password = ""; $dbnam = "test";
    
     // Create connection $conn = mysqli_connect($servername, $username, $password, $dbname);
    
    // Check connection if (mysqli_connect_errno()) {
     die("Connection failed: %s\n" . mysqli_connect_errno()); }
    
    $stmt = mysqli_prepare($conn, "SELECT * FROM myguests") or
    die(mysqli_error($conn));   mysqli_stmt_execute($stmt);
    
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();
    
     $fields[0] = &$stmt;
     $count = 1;
    
     while($field = mysqli_fetch_field($data)) {
         $fields[$count] = &$out[$field->name];
         $count++;
     }
    
     call_user_func_array("mysqli_stmt_bind_result", $fields);
     while(mysqli_stmt_fetch($stmt))    print_r($out);
    
    $stmt->close(); $conn->close();
    

    对我很好,希望对你有帮助

    【讨论】:

      【解决方案2】:

      第一个错误来自您的 call_user_func_array 语句:您需要在 mysqli_stmt_bind_result 周围加上引号,否则 PHP 假定它是一个常量。

      并且mysqli_stmt 中没有free() 函数,请改用$stmt->free_result()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-17
        • 2017-01-25
        • 2018-03-17
        • 2018-01-12
        • 2012-11-19
        • 1970-01-01
        相关资源
        最近更新 更多