Problema con fetch(PDO::FETCH_ASSOC)

Tengo un pequeño form a manera de login, con las variables $user y $contrasena que tienen los valores correctos, el problema es que me da

Fatal error: Call to a member function rowCount() on boolean

es decir, como si el array estuviera vacío y no tengo idea por qué. Acá dejo el código (obviamente todo va encerrado en las etiquetas de php):




  include("conectarBD.php");

  $usuario = $_POST['user'];
  $contrasena = $_POST['pass'];

  if (isset($usuario) && !empty($usuario) && isset($contrasena) && !empty($contrasena)) {
    $sql = "SELECT usuario, contrasena FROM usuarios WHERE usuario == :usuario";
    $statement = $conn->prepare($sql);
    $statement->execute(array(':usuario'=>$usuario));
    $getUser = $statement->fetch(PDO::FETCH_ASSOC);

    $total = $getUser->rowCount();
    if ($total = 0) {
      echo "Nothing";
    }
}

0
задан 06.11.2016, 19:39
3 ответа

Таким образом оно ты будет функционировать rowCount():

$sql = "SELECT usuario, contrasena FROM usuarios WHERE usuario = :usuario";
                                          // No es == si no = ^^^ 
$statement = $conn->prepare($sql);

$statement->execute(array(':usuario'=>$usuario));

$getUser = $statement->fetch(PDO::FETCH_ASSOC);

$total = $statement->rowCount();

if ($total > 0) {
//        ^^^ no se compara con =
   echo "Hay cosas";

} else {

   echo "No hay nada";
}
4
ответ дан 24.11.2019, 12:43
  • 1
    Равный останься, не сохраняя ничто, не s и # 233; в чем дело? – Power_HR 06.11.2016, 20:51
  • 2
    Дело в том, что он, как который он ничего не принес из формуляра, потому что c и # 243; я говорю, что он остается, и dem и # 225; s я считаю это правильным, но не приходит ничто из array, не s и # 233; из-за qu и # 233; – Power_HR 06.11.2016, 21:19
  • 3
    S и # 237; точно!! что, как который est и # 225; vac и # 237; или – Power_HR 06.11.2016, 21:27
  • 4
    @Power_HR - проверенный Сноп однажды, если твое решение возвратило что-то? Не, если ты используешь phpMyAdmin или казавшийся, но pru и # 233; я блею в консоли прямо: SELECT usuario, contrasena FROM usuarios WHERE usuario = 'nombre_de_usuario' – Black Sheep 06.11.2016, 21:34
  • 5
    Much и # 237; пропасти спасибо ты p ** или я люблю!: D не я hab и # 237; в фиксирование в этом! хороший глаз, спасибо man, твой ответ я ayud и # 243; слишком много – Power_HR 06.11.2016, 21:47

Ответ на то, что я увидел в твоем коде, - следующий:

        $query = "SELECT * FROM usuarios WHERE usuario= :username AND contrasenia = :pass";
        $stmt = $conn->prepare($query);
        $stmt->bindParam(':username', $usuario, PDO::PARAM_STR);
        $stmt->bindParam(':pass', $contrasenia, PDO::PARAM_STR);
        $stmt->execute();
        //obtenemos los resultados
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        //Obtenemos el conteo de filas
        $filas = count($result);
        //Obtenemos el conteo de otra forma
        $filas = $stmt->rowCount();

Одна ls наблюдения, которые я увидел в тебе cГіdigo, состоит, в том, что сделав сравнение, ты использовал оператор == , когда оно не было бы должно быть этим.

1
ответ дан 24.11.2019, 12:43
  • 1
    Большое спасибо!! ты имеешь весь raz и # 243; n крэк: D – Power_HR 06.11.2016, 21:47
$statement->fetch(PDO::FETCH_ASSOC);

Возврати ассоциативный array (карта) общий. Это не объект, не содержит никакого метода rowCount(). Чтобы получать количество данных, которых содержит array или map, он использует count ()

Я думаю, что ты запутываешь с методом, который предлагает объект statement В твоем случае, ты мог бы призывать это с

$statement->rowCount();

В любом случае, не рекомендует использовать это, чтобы получать количество линий, которые возвращает SELECT:

Если последнее решение SQL, выполненное объектом присоединенным PDOStatement было решением SELECT, какие-то базы данных могли бы возвращать число линий, возвращенное вышеупомянутым решением. Однако, это поведение не гарантировано для всех баз данных и он не был бы должен рассчитывать в нем для портативных приложений.

0
ответ дан 24.11.2019, 12:43
  • 1
    Равный останься, не сохраняя ничто, не s и # 233; в чем дело? – Power_HR 06.11.2016, 20:51