PDO (PHP Data Object) é uma novidade no PHP 5. Quando o PHP 6 está prestes a ser lançado, o PHP 6 usa apenas PDO para processar o banco de dados por padrão e moverá todas as extensões de banco de dados para PECL, então o padrão não existe mais .php_mysql.dll e similares, o que devo fazer? Só podemos acompanhar os tempos, então experimentei o PDO. (Este artigo é apenas básico, especialistas podem ignorá-lo, haha)
[O que é PDO]
PDO é um novo recurso importante adicionado ao PHP 5, porque antes do PHP 5, php4/php3 tinha um monte de extensões de banco de dados para se comunicar entre si banco de dados Conexão e processamento, php_mysql.dll, php_pgsql.dll, php_mssql.dll, php_sqlite.dll e outras extensões para conectar MySQL, PostgreSQL, MS SQL Server, SQLite, da mesma forma, devemos usar ADOdb, PEAR::DB, PHPlib: :Classes abstratas de banco de dados, como DB, são extremamente complicadas e ineficientes para nos ajudar. Afinal, como a eficiência do código PHP pode ser tão alta que podemos escrevê-lo diretamente em C/C++? Portanto, o surgimento do DOP é inevitável. Todos devem aceitar seu uso com uma atitude de aprendizado tranquila. Talvez você descubra que isso pode lhe poupar muito esforço.
[Instalando o PDO]
Estou executando o Windows XP SP2, então todo o processo é realizado no Windows. Quanto ao Linux/FreeBSD e outras plataformas, encontre as informações e configure você mesmo a instalação.
O meu é o PHP 5.1.4, que já vem com a extensão php_pdo.dll, mas requer um pouco de configuração antes de poder ser usado.
Abra c:windowsphp.ini, que é meu arquivo de configuração do PHP, e encontre a seguinte linha:
extension_dir
Este é o diretório onde existe nossa extensão My PHP 5: C:php5ext, então irei. Mude esta linha para:
extension_dir = "C:/php5/ext"
e encontre-a em php.ini:
;;;;;;;;;;;;;;;;;;;;;;;;;
; Extensões Dinâmicas ;
;;;;;;;;;;;;;;;;;;;;;;
Há um monte de coisas semelhantes a ;extension=php_mbstring.dll abaixo. adicione-o no final
.
extensão=php_pdo_mysql.dll
extensão=php_pdo_pgsql.dll
extensão=php_pdo_sqlite.dll
extensão=php_pdo_mssql.dll
extensão=php_pdo_odbc.dll
extensão=php_pdo_firebird.dll
;extension=php_pdo_oci8.dll
Vários drivers PDO podem ser adicionados, mas o seguinte php_pdo_oci8.dll, por não ter instalado o banco de dados Oralce, não tem isso, então uso ponto e vírgula para comentar. Então reinicie nosso servidor web, IIS/Apache, o meu é IIS, ei, você me despreza, no Windows é fácil.
Após reiniciar, escreva um arquivo phpinfo.php no diretório de documentos do nosso servidor web e adicione estes:
<?
phpinfo();
?>
Então abra nosso adorável navegador: IE/FireFox, o meu é o FireFox 2.0, acabei de baixar, é ótimo, não tenho medo de softwares nocivos, haha.
Digite no navegador: http://localhost/phpinfo.php Se o seu caminho para esta página for inconsistente, digite você mesmo.
No conteúdo de saída, se você conseguir vê-lo com sucesso:
PDO
Suporte DOP ativado
Drivers PDO mysql, pgsql, sqlite, mssql, odbc, firebird
Existem várias instruções de driver na parte traseira: PDO_Firebird, pdo_mssql, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite
. .
[Teste rápido]
Estou usando o MySQL 4.0.26, mas pessoalmente recomendo a todos que usem o MySQL 4.1.x ou MySQL 5.0.x, porque essas versões têm muitas coisas interessantes que valem a pena aprender. O que nosso PDO precisa para se conectar é meu MySQL 4.0. Se você não instalou o MySQL, instale-o você mesmo. Estabelecemos o MySQL e adicionamos a tabela foo à biblioteca de teste, incluindo quatro campos como id, nome, gênero e hora.
Começamos a construir a primeira aplicação PDO e criamos um arquivo pdo.php no diretório de documentos da Web:
<?php
$dsn = "mysql:host=localhost;dbname=teste";
$db = novo DOP($dsn, 'root', '');
$count = $db->exec("INSERT INTO foo SET nome = 'heiyeluren',gender='male',time=NOW()");
eco $contar;
$db = nulo;
?>
Não entendo o que significa, vamos explicar aos poucos. Esta linha:
$dsn = "mysql:host=localhost;dbname=test";
é para construir nosso DSN (fonte de dados). Veja as informações internas: o tipo de banco de dados é mysql, o endereço do host é localhost e o nome do banco de dados. é um teste. Apenas algumas informações. Os métodos de construção de fontes de dados de diferentes bancos de dados são diferentes.
$db = new PDO($dsn, 'root', '');
Inicialize um objeto PDO. O primeiro parâmetro do construtor é nossa fonte de dados, o segundo é o usuário que se conecta ao servidor de banco de dados e o terceiro parâmetro é a senha. . Não podemos garantir que a conexão seja bem-sucedida. Falaremos sobre exceções mais tarde.
$count = $db->exec("INSERT INTO foo SET nome = 'heiyeluren',gender='male',time=NOW()");
echo $count;
chama nosso objeto PDO conectado com sucesso para executar uma consulta. Esta consulta é uma operação para inserir um registro. Usar o método PDO::exec() retornará um resultado que afeta o registro. Finalmente, você ainda precisa finalizar o recurso do objeto:
$db = null;
Por padrão, esta não é uma conexão longa. Se você precisar de uma conexão longa com o banco de dados, será necessário adicionar um último parâmetro: array(PDO::ATTR_PERSISTENT. => true). Fica assim:
$
db = new PDO( $dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));
do anterior, mas é um pouco semelhante ao ADOdb.
[Continue aprendendo]
Se quisermos extrair dados, devemos usar a função de aquisição de dados. ($db usado abaixo são todos os objetos conectados acima)
<?php
foreach($db->query("SELECT * FROM foo")){
print_r($linha);
}
?>
Também podemos usar este método de aquisição:
<?php
$rs = $db->query("SELECT * FROM foo");
while($linha = $rs->fetch()){
print_r($linha);
}
?>
Se você quiser colocar todos os dados no array de uma vez, você pode fazer isso:
<?php
$rs = $db->query("SELECT * FROM foo");
$resultado_arr = $rs->fetchAll();
print_r($resultado_arr);
?>
Matriz
([0] => Matriz(
[id] => 1
[0] => 1
[nome] => heiyeluren
[1] =>heiyeluren
[gênero] =>Masculino[2] =>Masculino[horário] =>28/10/2006 23:14:23
[3] => 28/10/2006 23:14:23
)
}
Vejamos os registros internos. Existem índices digitais e índices associados, o que é um desperdício de recursos. Precisamos apenas do índice associado:
<?php.
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("SELECT * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$resultado_arr = $rs->fetchAll();
print_r($resultado_arr);
?>
Veja o código acima, o método setAttribute() serve para definir alguns atributos. Os atributos principais são: PDO::ATTR_CASE, PDO::ATTR_ERRMODE, etc. O que precisamos definir aqui é PDO::ATTR_CASE, ou seja. , usamos o índice associado para obter dados Ao configurar, existem várias opções para o índice associado ser maiúsculo ou minúsculo:
PDO::CASE_LOWER -- Força o nome da coluna a ficar em minúsculas PDO::CASE_NATURAL -- O nome da coluna será da maneira original PDO::CASE_UPPER -- Força o nome da coluna a ficar em letras maiúsculas
Usamos o método setFetchMode para definir o tipo de valor de retorno para obter o conjunto de resultados. Os mesmos tipos são:
PDO::FETCH_ASSOC -- formato de array associativo PDO.
::FETCH_NUM -- formato de array de índice numérico PDO::FETCH_BOTH -- ambos os formatos de arraySim
, este é o PDO::FETCH_OBJ padrão - na forma de um objeto, semelhante ao mysql_fetch_object() anterior.
use PDO::FETCH_ASSOC O que usar depende especificamente de suas próprias necessidades. Outras aquisições Digite o manual de referência.
Além do método de obtenção de dados acima, existe também este método:
<?php
$rs = $db->prepare("SELECT * FROM foo");
$rs->executar();
while($linha = $rs->fetch()){
print_r($linha);
}
?>
Na verdade, é quase a mesma coisa. Se você deseja obter os resultados de um campo em um registro especificado, você pode usar PDOStatement::fetchColumn():
<?php
$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
eco $col;
?>
Geralmente, fetchColumn() é usado para realizar estatísticas de contagem ou alguns registros que requerem apenas um único campo são fáceis de operar.
Para resumir brevemente as operações acima:
as operações de consulta são principalmente PDO::query(), PDO::exec() e PDO::prepare(). PDO::query() é usado principalmente para operações que retornam resultados registrados, especialmente operações SELECT. PDO::exec() é usado principalmente para operações que não retornam um conjunto de resultados, como INSERT, UPDATE, DELETE e outras operações. Ele retorna O resultado é o número de colunas afetadas pela operação atual. PDO::prepare() é principalmente uma operação de pré-processamento. Você precisa usar $rs->execute() para executar a instrução SQL no pré-processamento. Este método pode vincular parâmetros e é relativamente poderoso. . Todos Você pode consultar manuais e outras documentações. As principais operações para obtenção do conjunto de resultados são: PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL(). PDOStatement::fetchColumn() é um campo do primeiro registro especificado no resultado da busca. O padrão é o primeiro campo. PDOStatement::fetch() é usado para obter um registro e PDOStatement::fetchAll() é usado para obter todos os conjuntos de registros em um. Para obter os resultados, você pode definir o tipo do conjunto de resultados necessário por meio de PDOStatement::setFetchMode. .
Existem também duas operações adjacentes, uma é PDO::lastInsertId() e PDOStatement::rowCount(). PDO::lastInsertId() retorna a última operação de inserção e o tipo de coluna de chave primária é o último ID de incremento automático. PDOStatement::rowCount() é usado principalmente para o conjunto de resultados afetado pelas operações DELETE, INSERT e UPDATE de PDO::query() e PDO::prepare(), e é inválido para o método PDO::exec() e operações SELECT.
[Tratamento de erros]
O que você deve fazer se encontrar um erro no programa? Descrevemos aqui as informações de erro e o tratamento de exceções da classe PDO.
1. Abordagem orientada a objetos
Vamos primeiro ver como lidar com erros de conexão, etc., e usar a abordagem orientada a objetos para lidar com isso:
<?php.
tentar {
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$db = nulo;
} catch (PDOException $e) {
imprima "Erro: " $e->getMessage() .
morrer();
}
?>
Aqui usamos o recurso de tratamento de exceções orientado a objetos do PHP 5. Se houver uma exceção, iremos inicializá-la chamando PDOException para inicializar uma classe de exceção.
Estrutura de atributos da classe de exceção PDOException:
<?php
classe PDOException estende exceção
{
public $errorInfo = null; // Para obter informações de erro, você pode chamar PDO::errorInfo() ou PDOStatement::errorInfo() para acessar a $message protegida; // Para obter informações de exceção, você pode tentar Exception::getMessage() para access protected $code ; // Código de erro de status SQL, que pode ser acessado usando Exception::getCode()
}
?>
Esta classe de tratamento de exceções é integrada com a classe de tratamento de exceções integrada do PHP 5. Vamos dar uma breve olhada na estrutura da classe de tratamento de exceções integrada do PHP 5:
<?php
classeException
{
//Propriedade protegida $mensagem = 'Exceção desconhecida'; //Mensagem de exceção protegida $code = 0; //Código de exceção definido pelo usuário protected $file; onde ocorreu a exceção Número da linha
// Método final function getMessage(); // Retorna as informações da exceção final function getCode(); // Retorna o código da exceção final function getFile(); (); // Retorna o número da linha de código onde ocorreu a exceção final function getTrace(); // backtrace() array final function getTraceAsString();
}
?>
Da mesma forma, getFile() e getLine() podem ser chamados apropriadamente no código para localizar erros e tornar a depuração mais conveniente.
2. Use a abordagem orientada ao processo
para examinar primeiro o código:
<?
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$rs = $db->query("SELECT aa,bb,cc FROM foo");
if ($db->errorCode() != '00000'){
print_r($db->errorInfo());
saída;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = nulo;
?>
Os objetos PDO e PDOStatement possuem os métodos errorCode() e errorInfo(). Se não houver erros, errorCode() retorna: 00000, caso contrário, alguns códigos de erro serão retornados.
errorInfo()retorna
um array, incluindo códigos de erro definidos pelos códigos de erro PHP e MySQL e informações de erro.
(
[0] => 42S22
[1] => 1054
[2] => Coluna desconhecida 'aaa' em 'lista de campos'
)
Depois que cada consulta é executada, o resultado de errorCode() é o mais recente, para que possamos controlar facilmente a exibição da mensagem de erro.
[Resumo simples]
A partir do uso acima, podemos ver que o PDO é realmente poderoso. Há também outras coisas que não mencionei, como parâmetros de ligação, pré-processamento, procedimentos armazenados, processamento de transações e outras funções. Além disso, existem diferentes estruturas DSN de expansão de dados. O próprio banco de dados Oracle possui muitas coisas especiais que requerem estudo e compreensão aprofundados. Este artigo descreve apenas brevemente alguns conhecimentos introdutórios, que podem ser considerados como uma compreensão simples do PDO.