#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 по нескольким веским причинам.