2010-02-22 108 views
2

阵列嗨,我想转换一个网站使用准备好的mysql语句,但是我有一些麻烦取代我使用fetch_array()。返回从mysqli stmt查询

上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 ::免费()“

任何人都可以通过解释为什么我得到这些错误,以及如何解决它?

编辑:这里是来自php.net http://www.php.net/manual/en/mysqli-stmt.fetch.php#82742

回答

2

的第一个错误是来自你的call_user_func_array声明原文评论:你需要的mysqli_stmt_bind_result引号包围,否则PHP假定它是一个常数。

并且mysqli_stmt中没有free()功能,请使用$stmt->free_result()代替。

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(); 
对我

伟大的作品,希望它有助于