【发布时间】: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