Pergunta

Devo usar php DOP ou mysql_connect normal, para executar consultas de banco de dados em PHP?

Qual é o mais rápido?

Um dos grandes benefícios do DOP é que a interface é consistente em vários bancos de dados. Existem algumas funções legais para instruções preparadas também, que levam alguns a trabalheira de escapar de todas as seqüências de consulta. A portabilidade do DOP é maior do que mysql_connect.

Então, devo usar DOP para aquelas razões ou vara para o mysql_connect tradicional?

Foi útil?

Solução

DOP é um pouco mais lento do que o mysql_ * Mas tem grande portabilidade. DOP fornece uma interface única entre vários bancos de dados. Isso significa que você pode usar múltiplos DB sem usar mysql_query para mysql, mssql_query para MS SQL etc Basta usar algo como US $ db-> query ( "INSERT INTO ...") sempre. Não importa o motorista DB que você está usando.

Assim, para maior ou portátil projeto DOP é preferível. Mesmo zend framework usa PDO.

Outras dicas

Alguns horários rápidas indicam DOP é ligeiramente mais rápido na conexão.

$start = microtime(true);
for($i=0; $i<10000; ++$i) {

    try {
        $db = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage()."\n";
    }
    $db = null;
}

$pdotime = microtime(true) - $start;
echo "PDO time: ".$pdotime."\n";

$start = microtime(true);
for($i=0; $i<10000; ++$i) {
    $db = mysql_connect($host, $user, $password);
    if(!$db) {
        echo "Connection failed\n";
    }
    if(!mysql_select_db($schema, $db)) {
        echo "Error: ".mysql_error()."\n";
    }
    mysql_close($db);
}

$rawtime = microtime(true) - $start;
echo "Raw time: ".$rawtime."\n";

Dá resultados como

PDO time: 0.77983117103577
Raw time: 0.8918719291687

PDO time: 0.7866849899292
Raw time: 0.8954758644104

PDO time: 0.77420806884766
Raw time: 0.90708494186401

PDO time: 0.77484893798828
Raw time: 0.90069103240967

A diferença de velocidade será de qualquer maneira insignificante; estabelecer uma conexão de rede provavelmente vai levar muito mais tempo do que qualquer sobrecarga incorrida pela DOP, especialmente se o servidor MySQL está em outro host.

Você mencionou todas as razões para usar DOP si mesmo. Realmente, nunca use o mysql_ * funções diretamente, use PDO, ou usar alguns outra biblioteca .

Eu não acho que a velocidade é o que as pessoas estão procurando quando eles estão usando DOP - Eu não sei se há uma diferença, e eu honnestly não se importam: enquanto eu estou fazendo um par de consultas para um banco de dados ao gerar uma página, um par de milissegundos no lado do PHP não vai mudar nada.

Existem dois / três grandes coisas com DOP, em comparação com mysql_* :

  • Mais ou menos constante interface de accross bases de dados; melhor do que usar mysql_*, pg_*, oci_*, ...
  • Object-Oriented API ( mysqli_* tem uma OO-API, mas não mysql_*)
  • Apoio novos recursos do MySQL> = 4.1 (o mesmo que mysqli_*, mas não mysql_*, de novo)

BTW: Eu estou geralmente usando DOP - ou "à mão", ou como é integrado in / utilizada por Zend quadro e / ou Doutrina .


Como nota:. Mesmo se você não estiver indo para usar DOP, nota que o uso de mysqli em vez de mysql é recomendado

esta página do manual do PHP, sobre isso.

  • Com DOP você pode usos binded params e que vai evitar ataques de injeção SQL mais.
  • Você pode ganhar mais velocidade usando DOP preparado declarações.
  • interface padrão para todos os backends db
  • Há um monte de métodos úteis (como a buscar * família)

Eu fiz algumas desempenho testando para comparar funções Mysqli às funções DOP, utilizando ambas as declarações preparadas e consultas diretas regulares (testadas usando SELECT declarações sobre Mysqlnd e tabelas MyISAM).

Eu achei que as consultas DOP são apenas ligeiramente mais lento do que Mysqli, mas apenas ligeiramente. Isso faz sentido, já que DOP utilizado para este fim na maior parte apenas um wrapper que chama funções Mysqli. A vantagem de usar DOP é que o torna um pouco mais fácil de migrar para um banco de dados diferente, porque os nomes das funções não são específicos para MySQL.

A diferença de desempenho real está em se você usar consultas preparadas. Há um grande e significativo desempenho penalidade para usar consultas preparadas. Outras pessoas que testaram deles encontraram os mesmos resultados.

A única vez preparado consultas são mais rápidos é se você está preparando uma consulta uma vez e, em seguida, submetê-lo milhares de vezes com diferentes valores de dados. Caso contrário, é sempre mais rápido usar mysqli :: query () ou PDO :: query (). Mas é importante estar ciente de que essas funções não escapam valores de dados para você, então você precisa se lembrar de usar mysqli :: real_ escape_ string () ou PDO :: quote () sobre as variáveis ??de dados.

Eu geralmente recomendo usar PDO a menos que haja uma razão específica que você não pode. Se não houver pouca diferença entre os dois e você não tem nenhuma razão para não usar DOP, acredito que seria melhor para entrar na prática de usar DB abstração em seus aplicativos do que indo com mysql_ * simplesmente porque ele está lá. Eu diria que vamos melhor vitória prática.

Em ambos os casos, você chamar o mesmo servidor MySQL a partir do mesmo servidor Php ... então você não pode notar muita diferença.

Se você quer um bom desempenho, pensar em cache (cache de memória ou arquivo PHP simples ...) e fazer uma estrutura de base de dados bom (INDEX ...)

  • DOP é melhor do que o SQL
  • DOP E sua declaração Prepare Fornecer Melhor Secure Code contra injeção de SQL
  • DOP é Orientada a Objetos;)
  • DOP é compatível com alguns bancos de dados do motor Como explicado anteriormente
  • MySQLl_ * é obsoleto e será removido em breve
  • DOP proporcionar mais funcionalidades com menos linha de códigos Exemplo:

    DOP

    1. Conectar
    2. Verifique se há "<" e ">" e "#" (Esta verificação para usos globais)
    3. Preparar
    4. Executar
    5. Fechar

MySQL _ *

  1. Conectar
  2. Adicionar Backslash
  3. Xsafe
  4. Verifique se há "<" e ">" e "#" (Esta verificação para usos globais)
  5. Consulta
  6. Fechar

ambos a mesma funcionalidade, mas você comparar para códigos DOP é mais legível, :) Então, o que você pensa?

Se o desempenho não é um "problema real" para você, você deve usar PDO. O desempenho difere por margens pequenas, e DOP tem uma interface entre bancos de dados muito bom e portátil wich pode poupar algumas dores de cabeça no caso de você precisar usar vários motoristas de banco de dados.

A função mysql_connect está obsoleto a partir do PHP 5.5.0 e, como acontece com a maioria dos recursos obsoletos, serão removidos. Por isso, preferem usar pdo_mysql (ou outra alternativa MySQLi ) sobre mysql_connect

Fonte: http://php.net/manual/en/function. mysql-connect.php

Algumas Vantagens da DOP:

  1. pode acessar múltiplos bancos de dados.
  2. driver fornecido por muitos banco de dados para se conectar com diferentes banco de dados diferente.
  3. Quando mudar de um banco para outro banco de dados, você não precisa escrever todo o código para se conectar com novo banco de dados, basta alterar a seqüência de conexão e alguns consulta que são necessários para o novo banco de dados.
  4. Ele fornece preparar declaração que é uma espécie de modelo de consulta que compilou apenas uma vez e pode ser executado tantas vezes quanto quiser, apenas mudando os atributos que se chama o lugar-suporte.
  5. Fácil e Operação geral eficiente como- Insert, update ... etc.

DOP código de conexão do banco de dados:

<?php
$dbhost = 'localhost';
$dbname = 'clsrepair';
$dbuser = 'root';
$dbpass = '';

try {
    $db = new PDO("mysql:host={$dbhost};dbname={$dbname}",$dbuser,$dbpass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

catch(PDOException $e) {
    echo "Connection error: ".$e->getMessage();
}
?>

normal MySQL código de conexão do banco de dados:

<?php 
mysql_connect("localhost","root", "");
mysql_select_db ("clsrepair");
?>

ou

 <?php
$dbHost = 'localhost'; // usually localhost
$dbUsername = 'root';
$dbPassword = '';
$dbDatabase = 'clsrepair';
$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Unable to connect to Database Server.");
mysql_select_db ($dbDatabase, $db) or die ("Could not select database.");
?>

MySQL código de conexão do banco de dados fácil, mas DOP tem muitas vantagens.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top