sql >> Base de Datos >  >> RDS >> Mysql

No se puede obtener el número de filas y buscar cuando se usa la declaración preparada de MySQLi

Si desea utilizar mysqli_stmt::$num_rows (es decir, verifique la cantidad de filas en la declaración preparada), debe usar $stmt->store_result() después de ejecutar la instrucción preparada antes de poder comprobar el número de filas. Eso significa que el resultado se almacena en la memoria antes de verificar cuántas filas se devolvieron.

$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
    // ...

Sin embargo, si desea utilizar mysqli_result::$num_rows (en el resultado de MySQLi que convierte del resultado de la declaración), debe hacerlo después de hacer $result = $stmt->get_result(); y use $result->num_rows; , como se muestra a continuación.

$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
    while ($row = $result->fetch_assoc()) {
    // ....

Al final, ambos deberían terminar haciendo lo mismo:proporcionar un número de filas devueltas por la consulta preparada original.

Nota
Es importante tener en cuenta que no puede usar store_result() y get_result() en la misma declaración. Lo que significa que en el primer ejemplo, no puede convertir a un objeto mysqli-result (usando get_result() , que le permite usar el estándar fetch_assoc() método). Como store_result() almacena el resultado en la memoria, no hay nada para get_result() convertir, y viceversa.

Esto significa que si usa store_result() , debe buscar a través de la declaración-fetch, mysqli_stmt::fetch() y vincule los resultados a través de mysqli_stmt::bind_result() . Si usa get_result() , debe comprobar el número de filas en el objeto de resultado de MySQLi resultante (como se muestra en el segundo ejemplo).

Por lo tanto, debe construir su código de tal manera que solo necesite usar uno de ellos.

Dicho esto, usando affected_rows como se sugiere en los comentarios, no es la herramienta adecuada para el trabajo, según el manual en mysqli_stmt::$affected_rows (lo mismo se aplica a una consulta regular, mysqli::$affected_rows ):