如何获取一个assoc命令数组时取出致命错误(How to remove the fatal err

2019-06-17 21:50发布

我收到了在我的PHP / mysqli的代码,一个致命的错误,其指出,第46行:

Fatal error: Call to undefined method mysqli_stmt::fetch_assoc() in ...

我只是想知道我怎么能消除这种致命的错误?

它正指向这行代码是在这里:

$row = $stmt->fetch_assoc();

原始代码:

$query = "SELECT Username, Email FROM User WHERE User = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$user);
// execute query
$stmt->execute(); 
// get result and assign variables (prefix with db)
$stmt->bind_result($dbUser, $dbEmail);
//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();                                      

if ($numrows == 1){

$row = $stmt->fetch_assoc();
$dbemail = $row['Email'];

}

更新后的代码:

$query = "SELECT Username, Email FROM User WHERE User = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$user);
// execute query
$stmt->execute(); 
// get result and assign variables (prefix with db)
$stmt->bind_result($dbUser, $dbEmail);
//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();                                      

if ($numrows == 1){    
  $row = $stmt->fetch_assoc();
  $dbemail = $row['Email'];    
}

Answer 1:

变量$ stmt是类型mysqli_stmt的,不mysqli_result。 所述mysqli_stmt类没有一种方法“FETCH_ASSOC()”为它定义。

你可以通过调用其get_result()方法,从你的mysqli_stmt对象mysqli_result对象。 为此,您需要安装驱动程序mysqlInd!

$result = $stmt->get_result();
row = $result->fetch_assoc();

如果你没有安装驱动程序 ,你可以获取你的结果是这样的:

$stmt->bind_result($dbUser, $dbEmail);
while ($stmt->fetch()) {
    printf("%s %s\n", $dbUser, $dbEmail);
}

所以,你的代码应该变成:

$query = "SELECT Username, Email FROM User WHERE User = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$user);
// execute query
$stmt->execute(); 
// bind variables to result
$stmt->bind_result($dbUser, $dbEmail);
//fetch the first result row, this pumps the result values in the bound variables
if($stmt->fetch()){
    echo 'result is ' . dbEmail;
}


Answer 2:

更改,

$stmt->store_result();

$result = $stmt->store_result();

更改,

$row = $stmt->fetch_assoc();

$row = $result->fetch_assoc();


Answer 3:

你错过了这一步

$stmt = $mysqli->prepare("SELECT id, label FROM test WHERE id = 1");
$stmt->execute();
$res = $stmt->get_result(); // you have missed this step
$row = $res->fetch_assoc();


Answer 4:

我意识到,这个代码是因为地方上的计算器提供了答案:

//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();

我试了一下得到的行数,但意识到,我没有需要行$stmt->store_result(); ,并没有把我的号码。 我用这个:

$result      = $stmt->get_result();
$num_of_rows = $result->num_rows;
......
$row         = $result->fetch_assoc();
$sample      = $row['sample'];


Answer 5:

这是最好使用mysqlnd作为Asciiom指出。 但是,如果你在你不允许安装mysqlnd一个奇怪的情况是,它仍然有可能让您的数据到没有它的关联数组。 尝试在这个答案使用的代码库MySQLi -绑定到数组



文章来源: How to remove the fatal error when fetching an assoc array
标签: php mysqli