Jump to content
mamotinho

problemas ao conectar ao mssql utilizando a versão PHP 7.3.16

Recommended Posts

Olá pessoal, já rodei a internet inteira procurando uma função para eu conectar ao banco de dados SQL Server que está minha máquina virtual Dedicado. estou programando um site na hospedagem com a versão 7.3.16 , eu queria uma solução para eu conectar ao meu banco de dados mssql utilizando pdo.

 

Eu utilizo a seguinte conexão.
 

class Database
    {
        protected static $db;
        
        protected   $db_host        =   DB_HOST;
        protected   $db_usuario     =   DB_USER;
        protected   $db_senha       =   DB_PASS;

        private function __construct()
        {
            try
            {
				self::$db = new PDO("odbc:Driver={SQL Server};Server=".$this->db_host."; port=122; Uid=$this->db_usuario;Pwd=$this->db_senha;");          
                self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }
            catch (PDOException $e)
            {
                die("Connection Error: " . $e->getMessage());
            }
        }
		
        public static function conexao()
        {
            if (!self::$db)
            {
                new Database();
            }
            return self::$db;
        }
		
    }

alguém pode me da solução de como faço isso funcionar no PHP 7 pra cima.

Share this post


Link to post
Share on other sites
<?php
  
// constantes com as credenciais de acesso ao banco MySQL
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'ultimatephp_artigos');
  
// habilita todas as exibições de erros
ini_set('display_errors', true);
error_reporting(E_ALL);
 
date_default_timezone_set('America/Sao_Paulo');
  
// inclui o arquivo de funçõees
require_once 'functions.php';

functions.php

 

 

<?php
  
// Conecta com o MySQL usando PDO

function db_connect()
{
    $PDO = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
  
    return $PDO;
}
  

Share this post


Link to post
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

  • Similar Content

    • By biza
      Viva pessoal, 
      Estou com um problema na execução de um filtro aos dados vindos da base de dados, sera que alguém me pode ajudar, os dados estão vindo para a pagina através do método $_POST,
      que são seleccionados através do carregamento de uma dropbox chamada 'select-segment', desta forma se o utilizador apertar o botão 'action' ele executa o filtro caso não aperte ele executa a seleção sem filtros, será que alguém me pode ajudar...
      O erro devolvido é o seguinte:
      Fatal error::  Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /Applications/MAMP/htdocs/cargeWebsite/carList.php:46
      Stack trace:
      #0 /Applications/MAMP/htdocs/cargeWebsite/carList.php(46): PDOStatement->execute()
      #1 /Applications/MAMP/htdocs/cargeWebsite/index.php(155): include('/Applications/M...')
      #2 {main}
        thrown in 
      $query .='SELECT * FROM tbl_vehicle AS v INNER JOIN tbl_brands AS b ON v.brand_id = b.id_brand INNER JOIN tbl_images AS i ON v.id_vehicle = i.vehicle_id INNER JOIN tbl_fuel AS f ON v.fuel_id = f.id_fuel WHERE v.active = :active'; if(isset($_POST['action'])){ if(isset($_POST['select-segment']) && $_POST['select-segment']!=''){ $segment_filter = $_POST['select-segment']; $query.= 'AND segment_id IN ("'.$segment_filter.'")'; } $query .='ORDER BY v.last_inser ASC'; }else{ $query .='ORDER BY v.last_inser ASC'; } if($_POST['lenght'] = -1){ $query_1 = 'LIMIT :inicio, :limite'; } $dbh = createPDO(); $statement = $dbh->prepare($query); $statement->bindValue(':active',$intermedio); $statement->execute(); $number_filter_row = $statement->rowCount(); $statement = $dbh->prepare($query . $query_1); $statement->bindValue(':inicio',(int)$init, PDO::PARAM_INT); $statement->bindValue(':limite',(int)$limite, PDO::PARAM_INT); $statement->execute(); foreach ($result as $row){ }  
    • By clodoaldofc
      Boa tarde, pessoal!
      Sou novato em php .... venho do Lazarus;
      Estou tendo dificuldades em corrigir/converter esta função para o php 7.
      No php 5.6 este sistema funciona normalmente, porem quando esta no php 7 me retorna o erro : Uncaught Error: Cannot use object of type stdClass as array in 
      justamente na linha if (isset(this->db->data[0])) { $this->map($this->db->data[a]); } return $this->db->data;

      Se alguem puder me ajudar e se não for pedir muito, corrigir esta função pra eu ter como exemplo, agradeço.
       
          public function select($table, $where = '', $fields = '*', $order = '', $parametro = null, $limit = null) {           $this->db->query('SELECT ' . $fields . ' FROM ' . $table                 . (($where) ? ' WHERE ' . $where : '')                 . (($parametro) ? '  ' . $parametro : '')                 . (($order) ? ' ORDER BY ' . $order : '')                 . (($limit) ? ' LIMIT ' . $limit : ''))->fetchAll();           if (isset($this->db->data[0])) {             $this->map($this->db->data[0]);         }         return $this->db->data;
    • By Sapinn
      Iai galera beleza? Estou com um erro simples aqui como eu faço para estender minha conexão para outros arquivos ? Estou tentado fazer mas está dado um erro aqui
       
      arquivo connection.php
       
      <?php
      class Conexao{
          public $db_name = 'pessoa';
          public $host = 'localhost';
          public $user = 'root';
          public $pass = '';
       
          public function __construct()
          {
              try {
                  $pdo = new PDO("mysql:db_name=".$this->db_name.";host=".$this->host,$this->user,$this->pass);                                         
              } catch (PDOException $e) {
                  echo "Erro no banco ".$e->getMessage();
                  exit();
              }
          }
           
      }
       
      arquivo Pessoa.php
       
      <?php
      include 'connection.php';
      class Pessoa {
          private $pdo;
       
          public function __construct()
          {   
              $this->pdo = new Conexao();
          }
       
          public function buscarDados(){
              $stmt = [];
              $sql = $this->pdo->query("SELECT * FROM pessoa
              order by id desc");
              $stmt = $sql->fetchAll(PDO::FETCH_ASSOC);
              return $stmt;
          }
      }
       
      arquivo index.php
       
      <?php
          require_once 'models/Pessoa.php';
          $p = new Pessoa();
      ?>
      <!DOCTYPE html>
      <html lang="pt-br">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <link rel="stylesheet" href="assets/css/style.css">
          <title>Crud PDO </title>
      </head>
      <body>
          <section id="esquerda">
              <form action="">
                  <h2>Cadastrar Pessoa</h2>
                  <label for="nome">Nome: </label>
                  <input type="text" name="nome" id="nome">
                  <label for="telefone">Telefone: </label>
                  <input type="text" name="telefone" id="telefone">
                  <label for="email">Email:</label>
                  <input type="text" name="email" id="email">
                  <input type="submit" value="Cadastrar">
              </form>
          </section>
          <section id="direita">
          <?php
              $p->buscarDados();
          ?>
              <table>
                  <tr id="titulo">
                      <td>Nome</td>
                      <td>Telefone</td>
                      <td colspan="2">Email</td> 
                  </tr>
                  <tr>
                      <td>Maria</td>
                      <td>00000000</td>
                      <td>maria@gmail.com</td>
                      <td><a href="">Editar</a> <a href="">Excluir</a></td>
                  </tr>
              </table>
          </section>
      </body>
      </html>
       
      Erro que é apresentado:
      Fatal error: Uncaught Error: Call to undefined method Conexao::query()
    • By Kakaroto1309
      Preciso de uma ajuda para conectar com o banco. Estava tudo funcionando normalmente com MYSQL agora parou tudo e estou tentando trocar para MYSQLI.
      Não acho o erro, já tentei de tudo.
       
      connection.php
      <? function conecta() { $host = "localhost"; $user = "admin"; $pass = "123456789"; $db = "principal"; //Conexão $conexao = mysqli_connect($host, $user, $pass) or die("Erro na conexão:".mysqli_error()); //Selecionar BD mysqli_select_db($conexao,$db) or die("Erro ao selecionar BD"); } function desconecta() { mysqli_close(); } ?> validate.php
      <? if (empty($_POST) and (empty($_POST['cpUsuario']) OR empty($_POST['cpSenha']))) { header("Location: ../login.php"); exit; } else { include("connection.php"); conecta(); $varUsuario = $_POST['cpUsuario']; $varSenha = sha1($_POST['cpSenha']); $stt = "SELECT ID,txNome,txNivel FROM tbUsuario WHERE txUsuario='$varUsuario' and txSenha='$varSenha' LIMIT 1"; $sql = mysqli_query($conexao,$stt) or die(mysqli_error($conexao)); $existe = mysqli_num_rows($sql); if ($existe == 0) { echo "Login invalido ou inexistente na base"; exit; } else { $resultado = mysqli_fetch_assoc($sql); if (!isset($_SESSION)) { session_start(); } $_SESSION['UsuarioID'] = $resultado['ID']; $_SESSION['UsuarioNOME'] = $resultado['txNome']; $_SESSION['UsuarioNIVEL'] = $resultado['txNivel']; header("Location: ../menu.php"); exit; } } ?> O erro agora está dando o seguinte:
      PHP Warning:  mysqli_query() expects parameter 1 to be mysqli, null given in /home4/public_html/connection/validate.php on line 17
       
      Linha 17 é essa:
      $sql = mysqli_query($conexao,$stt) or die(mysqli_error($conexao));
       
      Se eu tiro o $conexao do mysqli_query ele da erro de "mysqli_query() expects at least 2 parameters, 1 given" e se eu coloco o erro é "mysqli_query() expects parameter 1 to be mysqli, null given"
       
      Alguem sabe como posso resolver isso?
    • By Omar~
      A pouco mais de um ano desde a data dessa postagem venho frequentando aqui o iMasters, e vejo que um vasta soma de dúvidas das pessoas é como conectar acessar, editar etc... dados em um banco sql.
      Então resolvi criar esse guia uma vez que até o momento não encontrei conteúdo similar aqui para dar uma introdução ao PDO. Voltado para quem está não tem noção alguma sobre pdo e quer fazer a manipulação de tabelas sql.
      Será um guia bem básico voltado no procedural, pois o alvo não é ensinar a programar e sim introduzir o leitor na PDO.
       
      Mas o que é PDO? Extensão orientada a objetos para manipulação de banco de dados P : PHP
      D : Data
      O : Object
      E como saber se meu sistema suporta PDO?
      Essa extensão foi introduzida no php a partir da versão 5.1, mas é possível saber se a mesma está instalada ou não:
       
      Mas o que é CRUD? As 4 operações principais de manipulação de banco de dados C : Create - criar dados
      R : Read - ler dados
      U : Update - alterar dados
      D : Delete - apagar dados
       
      Quais programas preciso para seguir esse guia? Primeiramente você deve possuir um sistema apache + SQL ou mariaDB instalado (Sugiro é que busque pelo Xampp)
      Um navegador de web (Sugiro Mozilla Firefox)
      Um editor de texto ou IDE (Sugiro o NetBeans IDE só a versão PHP e HTML já é o suficiente para desenvolvimento web)
       
       
       
       
      Então vamos botar a mão na maça!
       
      Para nosso primeiro passo então vamos criar uma banco de dados e uma tabela para que possa-mos utilizar em nossos testes, uma bem genérica e simples mesmo.
      Abra um editor de texto aí (sugiro que tenha o notepad++) e crie um novo arquivo assim: tabela.sql, colando o texto abaixo no arquivo.
      Não se esqueça que o nome do arquivo deve se terminado em .SQL
      CREATE DATABASE crudpdo DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; -- Cria o banco de dados USE crudpdo; -- Acessa o banco de dados para criar a tabela CREATE TABLE `usuarios` ( `usuario_id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50), `sobre_nome` varchar(50), `login` varchar(50), `senha` text, PRIMARY KEY (`usuario_id`) );  
      Criado o arquivo abra importe esse arquivo, se você usa o PhpMyAdmim(localhost/phpmyadmim), ao abri-lo procure por um input (IMPORTAR)
      Feito o processo corretamente você pode perceber que um novo banco de dados apareceu "crudpdo" e dentro dele uma tabela "usuarios", não se preocupe por nossa tabela está vazia iremos povoá-la com o decorrer desse guia.
       
      Simples não? Agora que temos nossa tabela, vamos enfim estabelecer a conexão com ela pois para podemos fazer as manipulações temos que conectar.
      Criamos então algumas variáveis que vão nos ajudar a modificar o acesso de forma mais rápida no futuro caso queiramos fazer isso.
       
      $host = '127.0.0.1'; // Endereço do banco de dados (Nosso exemplo é o ambiente local) $db = 'crudpdo'; // Banco de dados que criamos em nosso arquivo SQL $usuario = 'root'; // Nome do usuário de acesso ao banco de dados $senha = ''; // Se você intalou o xampp por exemplo ele possui um usuário global (root) sem senha  
      Vamos lançar um exceção para descobrir se a conexão foi realizada, para isso usaremos o bloco try. E caso houver erro armazenamos o erro na variável $erro
       
      try { } catch (PDOException $erro) { echo ('Erro na conexão: ' . $erro->getMessage()); }  
      Então criamos um objeto da PDO esse objeto será $con
      Nesse objeto instanciamos a classe pdo
      $con = new PDO($dsn, $user, $pass, $options);  
      Perceba como funciona a PDO:
      $dsn > Contém as informações do drive que será usado na conexão e o banco de dados usado para conectar $user > Contém a informação do login do usuário que pode acessar a tabela $pass > Contém a informação da senha do usuário $options >Pode comportar uma série de fatores, por isso usamos uma array para definir essa entrada, aqui eu só vou tratar a codificação de caracteres, talvez em um post futuro possa a vim falar sobre silenciar o console, modelador de acesso etc...  
      Veja como fica nossa conexão:
       
       
      E como sabemos se deu certo?
      Primeiramente se não conseguir conectar nossa exceção será lançada como erro e mostrará os motivos do erro assim como expliquei acima pelo uso do bloco try
      Mas se quiser-mos depurar usamos isso:
      var_dump($con);
      deve aparecer algo parecido a isso se acessarmos o arquivo pelo navegador
      object(PDO)#1 (0) { }
       
       
       
      C - Create/INSERT
      - Certo, certo que tal agora tentar-mos inserir algo em nossa tabela? Vamos?!
      Já que vamos inserir um registro criaremos uma nova intância da pdo reaproveitando o objeto da conexão
      $insert = $con->prepare
       
      Nesse momento começamos o prepared statements
      Então devo informa o que é para fazer
      INSERT INTO > insira dentro de Informo o nome da tabela no nosso exemplo é "usuarios" Informo as colunas da tabela separadas por virgula que no caso é "nome, sobre_nome, login, senha" Passo os valores preparados ":name, :upname, :login, :pass" os nomes devem começar com :"dois-pontos" e serem separados por virgula. É crucial que não erre na ordem, pois esses serão os valores inseridos em ordem com que você definiu as colunas, enquanto ao nomes você pode usar sua criatividade, só não aconselho usar caracteres especiais ou nomes muito longos.  
      Ficando assim minha query
      $insert = $con->prepare('INSERT INTO usuarios (nome, sobre_nome, login, senha) VALUES (:nome, :upname, :login, :pass)');  
      Por fim mandamos executar "dando nome aos gados"
       
      $insert->execute([ 'nome' => 'Chaves', 'upname' => 'Kiko', 'login' => 'Madruga', 'pass' => 'Florinda' ]);  
      Então pedimos a contagem do registro para saber se tudo ocorreu bem.
      if ($insert->rowCount()) { echo ('Dados Registrados'); } else { echo ('Nenhum registro inserido'); }
       
       
       
      Veja como ficou meu arquivo com a conexão e com o insert:
       
       
      Ah!! Mas aí você me pergunta: "Que diacho é isso" toda vez que eu atualizo a página ou acesso o mesmo registro é inserido novamente!
      Isso já são outros carnavais, aqui nós só estamos vendo a execução, enquanto a validação e checagens fica para a próxima... 
       
      R - Read/SELECT  
      Já que temos um registro ou mais, não sei quantas vezes você fez nossa brincadeira acima^^, então vamos ler esse(s) registro(s) agora.
      Para fazer um select fazemos da mesma forma que no insert, a única coisa que você deve ficar atento quando for executar as querys é com o prepared, onde o que você faz é só tirar os valores da execução, passado-os para outra camada mais protegida, o que já nos trás alguma segurança contra injeção de código.
       
      Criamos então nosso prepared para leitura
      $select = $con->prepare("SELECT * FROM usuarios WHERE nome = :username AND login = :userlogin");  
      Nesse caso estou fazendo um select em todos dos dados da tabela usuarios (SELECT * FROM usuarios) mas eu só quero os resultados que contenham o (nome & login) "Obeserve como é passada a referência da busca"
       
      Uma vez com a query preparada executamos passando o statements, através de uma array
      $select->execute([':username' => 'Chaves', ':userlogin' => 'Madruga']);  
      Veja que os valores buscados são os valores do cadastro, logo então esses dados existem.
      Agora eu tenho que escolher como eu quero receber esses dados pois eles sempre serão recebidos como array. E como quero essa array?
      Optei por utilizar uma array associativa por ser de mais fácil entendimento para iniciantes.
      Apesar que gosto de retornar os valores já em objetos, assim fica mais prático de se reaproveitar.
      $resultado = $select->fetchAll(PDO::FETCH_ASSOC);  
      Antes de mostrar os resultados eu tenho que saber se realmente existem resultados para mostrar, para basta que mandemos a PDO contar quantos registros ela encontrou usando rowCount()

      Então dentro dessa condição se existir eu percorro a array e vou exibindo os dados
      if ($select->rowCount()) { foreach ($resultado as $valores) { echo ("<b>Nome:</b> {$valores['nome']}<br />" . "<b>Sobre-Nome:</b> {$valores['sobre_nome']}<br />" . "<b>Login:</b> {$valores['login']}<br />" . "<b>Senha:</b> {$valores['senha']}"); } }  
      Olha como ficou minha leitura:
       
       
       
       
       
      U - Update/UPDATE  
       
      Bom agora que já inserimos, e fizemos a leitura vamos ao modificar
       
      Então criamos nossa query preparada
      $update = $con->prepare('UPDATE usuarios SET nome = :username, login = :userlogin WHERE usuario_id = :userid');  
      Note que só estou a alterar o nome e o login de uma tabela(os dados devem ser separados por virgula)
      Seguindo após o WHERE eu busco o local para alterar pela coluna usuario_id
       
      Passamos o statements
      $update->execute(['username' => 'Chapolin', 'userlogin' => 'Chiquinha', 'userid' => 1]);  
       
      Então o usuário que se chamava chaves agora vai ser modificado para Chapolin e seu login que era Madruga vai ser Chiquinha
      Para saber se foi modificados usamos também o rowCount()
       
      Veja como ficou o meu update:
       
       
       
       
      D - Delete/DELETE  
      Agora por fim vamos deletar os dados no banco.
      O mais simples de todo crud
       
      Preparamos
      $delete = $con->prepare('DELETE FROM usuarios WHERE usuario_id = :userid');  
      Executamos
      $delete->execute(['userid' => 3]); Hunnn.....? Se eu estou apenas buscando um ID porque criar uma array? Pelo simples fato que assim como nos outros exemplos acima, se você quiser atacar vários registros ao mesmo tempo.
       
      Veja como ficou meu delete:

       
       
      Adicionais
       
       
      Se você percebeu, tentei falar e mostrar o mais básico e simples o possível, a PDO de forma peculiar possui diversos métodos e técnicas de acesso e edição de databases, além vários truques de segurança.
       
      O ideal é acompanha-lo junto a orientação a objetos. Em todos os exemplos tive que ficar criando a conexão e enchendo o arquivo da mesma coisa repetitivamente. Não seria mais prático ter uma classe só para conectar, daí quando e precisar da conexão é só chamar?
      A mesma coisa vale para insert, select, update e delete. Não é mais fácil criar uma classe que faz tudo e quando precisar realizar tal coisa consiga em uma única linha porque já está pronto?
       
      Bem eu fico por aqui, como disse o guia era só um "basicão" para introdução a PDO. espero que tenham apreciado a leitura, e que tenha sido de ajuda isso. Mas se não apreciou nem ajudou fico grato por ter lido.
       
      Comentários, criticas... Fiquem a vontade
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.