PDO PHP Microsoft SQL SERVER [duplicate]

1

<?php

abstract class database {
    /* Método construtor do banco de dados */

    private function __construct() {

    }

    /* Evita que a classe seja clonada */

    private function __clone() {

    }

    /* Método que destroi a conexão com banco de dados e remove da memória todas as variáveis setadas */

    public function __destruct() {
        $this->disconnect();
        foreach ($this as $key => $value) {
            unset($this->$key);
        }
    }

    private static $dbtype = "mysql";
    private static $host = "localhost";
    private static $port = "3306";
    private static $user = "root";
    private static $password = "";
    private static $db = "banco";


    /* Metodos que trazem o conteudo da variavel desejada
      @return   $xxx = conteudo da variavel solicitada */

    private function getDBType() {
        return self::$dbtype;
    }

    private function getHost() {
        return self::$host;
    }

    private function getPort() {
        return self::$port;
    }

    private function getUser() {
        return self::$user;
    }

    private function getPassword() {
        return self::$password;
    }

    private function getDB() {
        return self::$db;
    }

    private function connect() {
        try {
            $this->conexao = new PDO($this->getDBType() . ":host=" . $this->getHost() . ";port=" . $this->getPort() . ";dbname=" . $this->getDB(), $this->getUser(), $this->getPassword());
        } catch (PDOException $i) {
            //se houver exceção, exibe
            die("Erro: <code>" . $i->getMessage() . "</code>");
        }

        return ($this->conexao);
    }

    private function disconnect() {
        $this->conexao = null;
    }

    /* Método select que retorna um VO ou um array de objetos */

    public function selectDB($sql, $params = null, $class = null) {
        $query = $this->connect()->prepare($sql);
        $query->execute($params);

        if (isset($class)) {
            $rs = $query->fetchAll(PDO::FETCH_CLASS, $class) or die(print_r($query->errorInfo(), true));
        } else {
            //$rs = $query->fetchAll(PDO::FETCH_OBJ) or die(print_r($query->errorInfo(), true));
            $rs = $query->fetchAll(PDO::FETCH_OBJ);
        }
        self::__destruct();
        return $rs;
    }

    /* Método insert que insere valores no banco de dados e retorna o último id inserido */

    public function insertDB($sql, $params = null) {
        $conexao = $this->connect();
        $query = $conexao->prepare($sql);
        $query->execute($params);
        $rs = $conexao->lastInsertId() or die(print_r($query->errorInfo(), true));
        self::__destruct();
        return $rs;
    }

    /* Método update que altera valores do banco de dados e retorna o número de linhas afetadas */

    public function updateDB($sql, $params = null) {
        $query = $this->connect()->prepare($sql);
        $query->execute($params);
        $rs = $query->rowCount() or die(print_r($query->errorInfo(), true));
        self::__destruct();
        return $rs;
    }

    /* Método delete que excluí valores do banco de dados retorna o número de linhas afetadas */

    public function deleteDB($sql, $params = null) {
        $query = $this->connect()->prepare($sql);
        $query->execute($params);
        $rs = $query->rowCount() or die(print_r($query->errorInfo(), true));
        self::__destruct();
        return $rs;
    }

}

PS: I use php from xamp and mac osx, I'm connecting to a remote sql server ....

Obg

    
asked by anonymous 03.02.2017 / 22:50

1 answer

1

Quick solution, change these lines to the Sql Server data:

private static $dbtype = "sqlsrv"; //aquivo troca para sqlsrv
private static $host = "ip";
private static $port = "3306";
private static $user = "root";
private static $password = "";
private static $db = "banco";

private function connect() {
    try {
        $this->conexao = new PDO($this->getDBType() . ":Server=" . $this->getHost() . ";port=" . $this->getPort() . ";Database=" . $this->getDB(), $this->getUser(), $this->getPassword());
    } catch (PDOException $i) {
        //se houver exceção, exibe
        die("Erro: <code>" . $i->getMessage() . "</code>");
    }

    return ($this->conexao);
}

Solution slower but more extensible. It changes all private by protected, so classes that inherit their class can see and modify these methods, and all self :: by static :: (for you to change the value of properties and your child class to use modifying it). To better understand self :: and static :: click this link

Once these substitutions have been created, create a new class and use it to connect to the database

class sqlServerDatabase extends database
{
    private static $dbtype = "sqlsrv"; //aquivo troca para sqlsrv
    private static $host = "ip";
    private static $port = "3306";
    private static $user = "root";
    private static $password = "";
    private static $db = "banco";

private function connect() {
    try {
        $this->conexao = new PDO($this->getDBType() . ":Server=" . $this->getHost() . ";port=" . $this->getPort() . ";Database=" . $this->getDB(), $this->getUser(), $this->getPassword());
    } catch (PDOException $i) {
        //se houver exceção, exibe
        die("Erro: <code>" . $i->getMessage() . "</code>");
    }

    return ($this->conexao);
}
} 

The second method allows you not to have to change your database class every time you connect to a new database, just inherit it. This is one of the principles of SOLID , more specifically O.

In case you do not find the driver, you should enable it in your php.ini, as it is Sql Server in general you will have to install the driver, I would start with this link

    
04.02.2017 / 01:52