PDO | Material Complementar
Algumas informações complementares sobre PDO e questões relacionadas ao tema
Classes do PDO
Classe PDO
A classe PDO é uma classe que representa a conexão entre o PHP e o Banco de Dados.
PDO {
public __construct ( string $dsn [, string $username [, string $passwd [, array $options ]]] )
public beginTransaction ( void ) : bool
public commit ( void ) : bool
public errorCode ( void ) : string
public errorInfo ( void ) : array
public exec ( string $statement ) : int
public getAttribute ( int $attribute ) : mixed
public static getAvailableDrivers ( void ) : array
public inTransaction ( void ) : bool
public lastInsertId ([ string $name = NULL ] ) : string
public prepare ( string $statement [, array $driver_options = array() ] ) : PDOStatement
public query ( string $statement ) : PDOStatement
public quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] ) : string
public rollBack ( void ) : bool
public setAttribute ( int $attribute , mixed $value ) : bool
}
Classe PDOException
A classe PDOException é uma classe que estende RuntimeException e é responsável por capturar qualquer erro gerado no PDO.
PDOException extends RuntimeException {
// Propriedades
public array $errorInfo;
protected string $code;
// Propriedades herdadas
protected string $message;
protected int $code;
protected string $file;
protected int $line;
// Métodos herdados
final public Exception::getMessage ( void ) : string
final public Exception::getPrevious ( void ) : Exception
final public Exception::getCode ( void ) : mixed
final public Exception::getFile ( void ) : string
final public Exception::getLine ( void ) : string
final public Exception::getTrace ( void ) : array
final public Exception::getTraceAsString ( void ) : string
public Exception::__toString ( void ) : string
final private Exception::__clone ( void ) : string
}
Classe PDOStatement
A classe PDOStatement representa uma 'instrução preparada' (pretared statement) e, depois de executada, também representa seu conjunto de resultados.
PDOStatement implements Traversable {
// Propriedades
readonly string $queryString;
// Métodos
public bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata ]]] ) : bool
public bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] ) : bool
public bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) : bool
public closeCursor ( void ) : bool
public columnCount ( void ) : int
public debugDumpParams ( void ) : void
public errorCode ( void ) : string
public errorInfo ( void ) : array
public execute ([ array $input_parameters ] ) : bool
public fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] ) : mixed
public fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] ) : array
public fetchColumn ([ int $column_number = 0 ] ) : mixed
public fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] ) : mixed
public getAttribute ( int $attribute ) : mixed
public getColumnMeta ( int $column ) : array
public nextRowset ( void ) : bool
public rowCount ( void ) : int
public setAttribute ( int $attribute , mixed $value ) : bool
public setFetchMode ( int $mode ) : bool
}
Informações Úteis
Constantes Pré Definidas
O PDO possui uma série de Constantess Pré Definidas. A seguir veremos as principais, mas vale conferir a lista de todas elas, basta clicar nesse link.
Constante | Descrição |
---|---|
PDO::PARAM_BOOL | Representa dado do tipo booleano (1 como true ou 0 como false) |
PDO::PARAM_NULL | Representa dado do tipo SQL NULL |
PDO::PARAM_INT | Representa dado do tipo SQL INTEGER |
PDO::PARAM_STR | Representa dado do tipo SQL CHAR, VARCHAR e outros relacionados a strings |
PDO::FETCH_ASSOC | Retorna cada registro (row) como um array indexado pelo nome da coluna. Em caso de colunas com o mesmo nome, retorna apenas um valor por nome de coluna |
PDO::ERRMODE_EXCEPTION | Dispara o PDOException em caso de erros (como falha na conexão), útil para debug |
Outras maneiras de se conectar ao Banco de Dados com PHP
Alternativas ao PDO
Uma alternativa ao uso do PDO é o mysqli. Também existe o mysql, mas foi descontinuado na versão 7.0.
Comparação entre mysqli, PDO e mysql
Vamos comparar as principais características de cada modo de se conectar ao Banco de Dados permitido pelo PHP:
Característica | mysqli | PDO | mysql |
---|---|---|---|
Versão PHP de introdução | 5.0 | 5.1 | 2.0 |
Existente no PHP 5.0 | ✓ | ✓ | ✓ |
Existente no PHP 7.0 | ✓ | ✓ | ✕ |
Status de Desenvolvimento | Ativo | Ativo | Removido |
Ciclo de Vida | Ativo | Ativo | Removido |
Uso Recomendado | ✓ | ✓ | ✕ |
Interface Orientada a Objetos | ✓ | ✓ | ✕ |
Interface Procedural | ✓ | ✕ | ✓ |
Consultas Assíncronas | ✓ | ✕ | ✓ |
Conexões Persistentes | ✓ | ✓ | ✓ |
Suporta Charsets | ✓ | ✓ | ✓ |
Prepared Statements do lado do Servidor | ✓ | ✓ | ✕ |
Prepared Statements do lado do Cliente | ✕ | ✓ | ✕ |
Stored Procedures | ✓ | ✓ | ✕ |
Statements Múltiplos | ✓ | ✓* | ✕ |
Transactions | ✓ | ✓ | ✕ |
Transactions controladas por SQL | ✓ | ✓ | ✓ |
Todas Funcionalidades do MySQL 5.1+ | ✓ | ✓* | ✕ |
Conclusão
Não há uma maneira melhor nem mais correta de se conectar ao Banco de Dados - mas é claro que não queremos usar a API mysql, pois foi descontinuada. Tendo dito isso, terá de escolher entre msqli e PDO. Então a principal pergunta que deve se fazer é:
O que é mais importante no meu projeto - performance ou portabilidade?
Se a resposta for performance e estiver certo de que o projeto sempre usará o MySQL, opte pelo mysqli. Agora se for portabilidade, é mais seguro optar pelo PDO.
No curso, abordaremos o PDO, por se tratar de um modo mais seguro e mais recente, mas vale estudar sobre mysqli também - acesse esse link para saber mais.
Referências sobre PDO
Documentação Oficial PDO
Confira alguns links úteis para estudo complementar sobre PDO:
Artigos Interessantes sobre PDO
Confira artigos variados sobre PDO para ampliar seus conhecimentos sobre o tema:
Tópicos sobre PDO em Fóruns
Confira algumas discussões relacionadas ao PDO nos principais fóruns de desenvolvimento web: