从mysqli stmt查询返回一个数组

时间:2010-02-22 10:20:29

标签: php sql arrays mysqli fetch

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

关于php.net的评论提供了一个我认为应该可行的解决方案但是由于某些原因我在通过call_user_func_array()调用函数时会遇到奇怪的未定义常量错误,有人会建议更好的方法吗? / p>

这是我目前正在使用的功能。我在这里张贴了一段时间(这是扩展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.net http://www.php.net/manual/en/mysqli-stmt.fetch.php#82742

的原始评论

2 个答案:

答案 0 :(得分:2)

第一个错误来自您的call_user_func_array声明:您需要mysqli_stmt_bind_result周围的引号,否则PHP会认为它是常量。

free()中没有mysqli_stmt功能,请改用$stmt->free_result()

答案 1 :(得分:0)

 $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();

对我有用,希望有所帮助