PHP:为什么mysqli_fetch_assoc()赢了';不行?我正在使用mysqli_stmt_get_result()
我有一个MySQL查询,它一直在运行,直到我更改它以使用准备好的语句。 我无法理解为什么会出现此错误: mysqli_fetch_assoc()希望参数1是mysqli_result,object 给定 (此登录表单的)查询应仅返回一个结果:PHP:为什么mysqli_fetch_assoc()赢了';不行?我正在使用mysqli_stmt_get_result(),php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我有一个MySQL查询,它一直在运行,直到我更改它以使用准备好的语句。 我无法理解为什么会出现此错误: mysqli_fetch_assoc()希望参数1是mysqli_result,object 给定 (此登录表单的)查询应仅返回一个结果: $conectar = mysqli_connect(localhost, USER, PASS, DATABASE); //from the log in form $email = $_POST['email']; $
$conectar = mysqli_connect(localhost, USER, PASS, DATABASE);
//from the log in form
$email = $_POST['email'];
$clave = $_POST['clave'];
//this should get me just one result: the user to which the email belongs.
$consulta = "SELECT usuarios.userID, usuarios.userPass, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, rolesUsuarios.nombreRol,
GROUP_CONCAT(rolesUsuarios.nombreRol SEPARATOR '|') AS roles
FROM rolesUsuarios, usuarios
WHERE usuarios.userEmail=?
AND rolesUsuarios.userID = usuarios.userID
GROUP BY usuarios.userID
";
$buscarUsuario = mysqli_prepare($conectar,$consulta);
mysqli_stmt_bind_param($buscarUsuario, 's', $email);
mysqli_stmt_execute($buscarUsuario);
if (mysqli_stmt_get_result($buscarUsuario)) {
$row = mysqli_fetch_assoc($buscarUsuario);
$originalPass = $row['userPass'];
...
为什么不工作?查询本身应该返回一个带有该结果的数组,其中包含用户名电子邮件、密码(实际上是一个哈希值)、他的角色等。使用mysqli_stmt_execute()时,在执行任何其他查询之前,必须使用mysqli_stmt_fetch()函数获取数据 你很接近:
// vvvvvvv--- this is missing
if ($result = mysqli_stmt_get_result($buscarUsuario)) {
$row = mysqli_fetch_assoc($result);
// ^^^^^^^--- & needs to be used here
原因是,$buscarusario
是一个语句“handle”,而不是来自数据库的实际结果集。您可以使用该“句柄”来获得实际的结果集。遵循使用文档的逻辑线索:
获取mysqli\u stmt
参数并返回mysqli\u结果
:
mysqli_结果mysqli_stmt_get_结果(mysqli_stmt$stmt)
获取一个mysqli\u结果
:
数组mysqli_fetch_assoc(mysqli_result$result)
根据文档(),这是如何使用mysqli准备好的语句的,其中$stmt在代码段中是$buscarusario:
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result, MYSQLI_NUM);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result, MYSQLI_NUM);