Jump to content

PHP e PDO


sergio.costa
Go to solution Solved by Ivo Vicente,

Recommended Posts

Boas noites pessoal.

Comecei agora a usar PHP e estou com dificuldade em perceber um erro que me está a acontecer.

Ando a criar uns exemplos para praticar a linguagem e deparei-me com o seguinte erro:

Citação


Warning:  Undefined variable $pdo_user in C:\xampp\htdocs\SQL_Config\SQL_User_Querys.php on line 26
Fatal error:  Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\SQL_Config\SQL_User_Querys.php:26
Stack trace:
#0 C:\xampp\htdocs\Login\Try-login.php(44): Verificar_tentativas('Scosta')
#1 {main}
  thrown in C:\xampp\htdocs\SQL_Config\SQL_User_Querys.php on line 26

Sempre que chamo a função dá este erro.

Se eu colocar as variáveis dentro da função funciona bem mas se forem declaradas fora diz que o objeto $pdo_user não esta definido.

Estou certo que um erro de principiante e não estou a chegar lá.

<?php

// Definir Comunicação

    //Definir Credenciais
    $HOST_NAME ="localhost";
    $DB_NAME="secure-login";
    $DB_USER="root";
    $DB_PASSWORD="";

// Instanciar Conexão PDO
$pdo_user = new PDO(
    "mysql: host=$HOST_NAME; dbname=$DB_NAME;",
    $DB_USER,
    $DB_PASSWORD);

//Verificar tentativas de login falhadas
function Verificar_tentativas ($user){
   
    //Uma hora atras
    $hora_Atras = time() - 60;

    //preparar query
    // $query = "SELECT COUNT(`User`) FROM login_attemps WHERE `User` = :User AND `Time` > :Hora;";
    $query = "SELECT * FROM login_Attempts;";
    $stmt = $pdo_user->prepare($query);
    //Preparar Valores
    // $stmt->bindValue("User", $User);
    // $stmt->bindValue("Hora", $hora_Atras); 
    
    //Executar
    $stmt->execute();

    if ($stmt->rowCount() >= 1){
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        // if($result['COUNT(`User`)']>= 5){
        // }            
    }
    return $result;
}
?>

 

Fico desde já agradecido a qualquer ajuda que me possam dar.

 

Sem mais

Sérgio Costa

Link to comment
Share on other sites

  • Solution

Viva @sergio.costa

A variável não é encontrada porque é declarada fora da function logo não lhes podes aceder porque está fora do escopo (scope)

Tens pelo menos duas maneiras de resolver o teu problema

<?php 
// Aceitas a variavel de ligação nos parametros da função 
function Verificar_tentativas ($connection, $user){
  ....
  $stmt = $connection->prepare($query);
  ....
}

// Invocas com a variavel
Verificar_tentativas($pdo_user, $user);

ou

<?php 
// Usas a keyword global para a função ir ao escopo global buscar a variavel
function Verificar_tentativas ($user){
  global $pdo_user;
  ....
}

Espero que resolva o teu problema, e te permita continuar a aprender.

Já agora, não uses maiúsculas para começar o nome da função, e deixo aqui 2 links uteis (em inglês) se estas a começar PHP

  • Vote 1

Feito é melhor que perfeito

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.