Выполнение и выборка возвращают пустой pdo oracle 11g

#php #pdo #oracle11g

#php #pdo #oracle11g

Вопрос:

Я не могу выбрать значения из моей таблицы из oracle 11g. Это не проблема с подключением, поскольку create работает просто отлично. Сначала я покажу код для создания, а затем код для выбора. Происходит то, что он выдает мне сообщение об успешном завершении, но возвращаемое значение не возвращается. Мой пользователь существует, и я предоставил ему эти разрешения. Я могу выбирать, когда я нахожусь в cmd.

     grant create table, create procedure,
 create trigger, create view, create sequence,
 create session to usu;
  

Создать:

     public function createLast($user)
{
    $nome = $user->getNome();
    $email = $user->getEmail();
    $user->criptografar();
    $senha = $user->getSenha();

    $sql = "insert into usuario values (null,:nome,:senha,:email)"; 
    $stmt = Database::open()->prepare($sql);
    $stmt->bindValue(':nome', $nome, PDO::PARAM_STR);
    $stmt->bindValue(':senha', $senha, PDO::PARAM_STR);
    $stmt->bindValue(':email', $email, PDO::PARAM_STR);

    $result = $stmt->execute();

    if (!$result) {
        var_dump($stmt->errorInfo);
        exit;
    } else {
        $sh = Database::open()->prepare('SELECT SEQ_USUARIO.NEXTVAL AS nextInsertID FROM DUAL');
        $sh->execute();
        $nextInsertId = $sh->fetchColumn(0);
        $codigo = Database::open()->$nextInsertId;
        $user->setId($codigo);
        return $user->getId();
    }
}
  

Мой код для выбора:

 public function loginLast($user)
{
    $email = $user->getEmail();
    $user->criptografar();
    $senha = $user->getSenha();
    

    //$sql = "select * from user where  senha=:senha  and  email=:email and ativo=1  ";
    $sql = "select * from usuario where senha=:senha and email=:email";
    ///$sql = "SELECT * from usuario where  senha='".$senha."' and  email='".$email."'";
    $stmt = Database::open()->prepare($sql);
    $stmt->bindValue(':senha', $senha, PDO::PARAM_STR);
    $stmt->bindValue(':email', $email, PDO::PARAM_STR);
    $stmt->execute(); 
    return $stmt->fetch();

}
  

Теперь некоторые коды, которые используются для обоих
(для подключения)

     <?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ini_set('display_errors', 1);

class Database
{

    public static $conn;

    public static function open()
    {

        if (!isset(self::$conn)) {
            try {
                self::$conn = new PDO("oci:dbname=127.0.0.1:1521/XE", "usu", "pass");
                self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                self::$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

            } catch (PDOException $e) {
                echo $e->getMessage();
            }
        }
        return self::$conn;
    }

    public static function prepare($sql)
    {
        return self::open()->prepare($sql);
    }
}
  

(my class)

 <?php

class Usuario{
    private $id;
    private $nome;
    private $email;
    private $senha;
    private $ativo;
 
    
    private $endereco;
     
    public function __construct($id=null,$nome=null,$senha=null,$email=null){
       $this->setId($id);
       $this->setNome($nome);
       $this->setSenha($senha);
       $this->setEmail($email);
    }
  

    public function __toString(){
        return $this->id.";".$this->nome.";".$this->email.";".$this->senha;
    }
  
  
  
  
    
    
    public function getNome()
    {
      return $this->nome;
    }
  
    
    public function setNome($nome)
    {
      $this->nome = $nome;
  
      return $this;
    }
  
    
    public function getEmail()
    {
      return $this->email;
    }
  
    
    public function setEmail($email)
    {
      $this->email = $email;
  
      return $this;
    }
  
    
    public function getSenha()
    {
      return $this->senha;
    }
  
   
    public function setSenha($senha)
    {
      $this->senha = $senha;
  
      return $this;
    }
  
  
  public function criptografar(){
       $chave = "ewqe12HS@@###dsan11=123456789;";
             $chave = md5($this->getSenha().$chave);
         $this->setSenha($chave);
    }
     



 
    public function getId()
    {
        return $this->id;
    }

    
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

   
    public function getEndereco()
    {
        return $this->endereco;
    }

    
    public function setEndereco($endereco)
    {
        $this->endereco = $endereco;

        return $this;
    }
 
    public function getAtivo()
    {
        return $this->ativo;
    }

  
    public function setAtivo($ativo)
    {
        $this->ativo = $ativo;

        return $this;
    }
}




?>
  

(мой контроллер)

 <?php

//versionamento ... (versiona ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ini_set('display_errors',1);

session_start();
include_once "../Model/Usuario.php";
include_once "../Persistence/UsuarioPDO.php";

class ControllerUsuario{



   public function resgateInclusao(){
       if (isset($_POST["nome"]) amp;amp; (isset($_POST["email"])) amp;amp; (isset($_POST["senha"]))) {
       
            $nome = $_POST["nome"];
            $email = $_POST["email"];
             $senha = $_POST["senha"];
        $usuario= new Usuario;
            $usuario->setId(0);
            $usuario->setNome($nome)->
                   setEmail($email)->
                            setSenha($senha);
          return $usuario;
   }else{
         return null;
   }
 }


  
   public function validacaoResgateInclusao($user){
        $email = $user->getEmail();
        $email = filter_var($email, FILTER_SANITIZE_EMAIL);
      if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
          return true;     
      }else{
         return false;
      }
   }
 
 
   public function   requestValidacaoInclusaoValidacao(){
        $user =  $this->resgateInclusao();
       if ($user){
               $resposta =  $this->validacaoResgateInclusao($user);
          if ($resposta==true){
            return   $user;
              }else{
            return null;
        }  
       }else{
       return null;
      }
  }

  

   public function actionGravar($user){
          if (isset($user)){
             try{
              $pdo = new UsuarioPDO;
              $pdo->createLast($user);
              $_SESSION["msg"]= "Dados Gravados do Usuario";
              header('Location:../usuario.php');
            }catch(Exception $ex){
               $_SESSION["msg"]= "Error: ".$ex->getMessage();
               header('Location:../usuario.php');
         }
        }else{
              $_SESSION["msg"]= "Dados Nao Validos para gravacao";
              header('Location:../usuario.php');
      }
   }
 
 //---------------------------------

  

   public function resgateLogin(){
      if ( (isset($_POST["email"])) amp;amp; (isset($_POST["senha"]))) {
      
           $email = $_POST["email"];
            $senha = $_POST["senha"];
       $usuario= new Usuario;
           $usuario->      
                     setEmail($email)->
                           setSenha($senha);
         return $usuario;
  }else{
        return null;
  }
}


 
  public function validacaoResgateLogin($user){
       $email = $user->getEmail();
       $email = filter_var($email, FILTER_SANITIZE_EMAIL);
     if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
         return true;     
     }else{
        return false;
     }
  }


  public function   requestValidacaoLoginValidacao(){
       $user =  $this->resgateLogin();
      if ($user){
              $resposta =  $this->validacaoResgateLogin($user);
         if ($resposta==true){
           return   $user;
             }else{
           return null;
       }  
      }else{
      return null;
     }
 }

 

  public function actionLogin($user){
         if (isset($user)){
            try{
             $pdo = new UsuarioPDO;
             $logado =  $pdo->loginLast($user);
     
            if (isset($logado)){
             $_SESSION["msg"]= "Usuario Logado Com Sucesso ";
             $_SESSION["usuario"]= $logado;
             header('Location:../View/USU/logado.php');
              }else{
                  throw new Exception('Nao Logado');
              }
           }catch(Exception $ex){
              $_SESSION["msg"]= "Error:".$ex->getMessage();
              header('Location:../usuario.php');
        }
       }else{
             $_SESSION["msg"]= "Dados Nao Validos para Login";
             header('Location:../usuario.php');
     }
  }


}


$controller = new ControllerUsuario();

$cmd = $_GET["cmd"];

if ($cmd=="gravar"){

   $user = $controller-> requestValidacaoInclusaoValidacao();
   $controller->actionGravar($user);
}else if ($cmd=="logar"){
  $user = $controller-> requestValidacaoLoginValidacao();
   $controller->actionLogin($user);
}

?>
  

Комментарии:

1. Это довольно много кода для нас, читателей, чтобы посмотреть — можете ли вы уменьшить testcase? Можете ли вы выполнить некоторую отладку (даже через вызовы var_dump помогли бы)? Какой вызов не возвращает значение? Некоторые примечания: Oracle XE 11 очень старый; последняя версия — 18. Лучше использовать OCI8 вместо PDO_OCI по нескольким веским причинам.