Giihh 6 Denunciar post Postado Julho 10, 2014 Olá, Entendo que PDO e MySQLI fazem a conexão e ações com o BD. Mas qual a diferença entre os dois? Compartilhar este post Link para o post Compartilhar em outros sites
Pedro Roccon 9 Denunciar post Postado Julho 10, 2014 Gislef, A principal diferença é que o MySQLi, como o próprio nome já propões, é que ele trabalha exclusivamente com bancos de dados MySQL. Já o PDO, consegue trabalhar com diversos banco de dados, seja ele MySQL, PostegreSQL, SQL Server e até mesmo Oracle. A principal vantagem é que você não fica preso a apenas um tipo de banco de dados. Se amanhã ou depois seu cliente decidir migrar de MySQL para PostgreSQL, você apenas irá ter que alterar 1 linha, indicando ao PDO qual será o novo banco de dados. Já no caso do MySQLi, isso não será possível, pois ele trabalha exclusivamente com o MySQL, portanto você teria que trocar todos os comandos do seu código para outro que trabalho com o novo banco de dados. O PDO também possui alguns recursos a mais e a vantagem de ser mais seguro que o MySQLi. Espero ter ajudado, Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
jgustavo99 85 Denunciar post Postado Julho 10, 2014 Olá! Como o Pedro citou, a difierença entre o MYSQLI e PDO é o Banco de Dados que visa. O MYSQLI seria só para DB Mysql, e o PDO para vários. O PDO é mais seguro, pois é Orientado a Objetos e tem vários outros recursos. Espero ter Ajudado ;) Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Julho 10, 2014 Gislef, A principal diferença é que o MySQLi, como o próprio nome já propões, é que ele trabalha exclusivamente com bancos de dados MySQL. Já o PDO, consegue trabalhar com diversos banco de dados, seja ele MySQL, PostegreSQL, SQL Server e até mesmo Oracle. A principal vantagem é que você não fica preso a apenas um tipo de banco de dados. Se amanhã ou depois seu cliente decidir migrar de MySQL para PostgreSQL, você apenas irá ter que alterar 1 linha, indicando ao PDO qual será o novo banco de dados. Já no caso do MySQLi, isso não será possível, pois ele trabalha exclusivamente com o MySQL, portanto você teria que trocar todos os comandos do seu código para outro que trabalho com o novo banco de dados. O PDO também possui alguns recursos a mais e a vantagem de ser mais seguro que o MySQLi. Espero ter ajudado, Abraços! Como eu disse em outro tópico, PDO não é um ORM, essa fantasia que uns zé da paçoca criaram que usando o PDO dá pra mudar para qualquer BD a qualquer momento beira o ridículo... isso é a legítima coisa de alguém que sempre usou o MySQL e acha que tudo funciona exatamente igual... tenta mudar de um Oracle pro MySQL e vocês vão ver que a coisa não é nem de perto tão simples assim, se fosse não haveria necessidade de existir o ORM para suprir este tipo de coisa. Olá! Como o Pedro citou, a difierença entre o MYSQLI e PDO é o Banco de Dados que visa. O MYSQLI seria só para DB Mysql, e o PDO para vários. O PDO é mais seguro, pois é Orientado a Objetos e tem vários outros recursos. Espero ter Ajudado ;) Sério que por ele ser OO o torna mais seguro???? Poderia me citar uma fonte confiável no mundo da programação que diz que algo OO é mais seguro do que o procedural??? Compartilhar este post Link para o post Compartilhar em outros sites
André Wielki 6 Denunciar post Postado Julho 10, 2014 Tanto Mysqli quanto PDO são mais seguros, você não consegue dar aqueles sql injection básicos, e inserir comandos nos formularios bugando o banco e puxando informações que no mysql conseguiria, porém nada é 100% seguro, os mysqli e PDO ambos são mais seguros, apenas mais seguros que o deprecado mysql. Eu uso Mysqli e o recomendo por ser um pouco mais rápido e facil que o PDO que é um pouco mais complexo. Depois de dominar o mysqli, aconselho então aprender PDO, pois hoje em dia nas empresas e tudo ainda não foi adotado o PDO, é sempre bom você saber dominar os códigos orientados especificadamente ao Mysql, Oracle, Postgree, etc E usar o PDO como uma extençã ode conhecimento. Sabendo se que o PDO é meramente quase nada, mas é mais lento um pouco que MySQLi, obviamente você vai ter um código com maior qualidade trabalhando com Mysqli. Se tu sómente souber programar com PDO, vai ser dificil se adaptar num mercado de trablho depois, te dou certeza que não é a maioria que trabalha com pdo, e sim a seus respectivos sgbds. Compartilhar este post Link para o post Compartilhar em outros sites
Pedro Roccon 9 Denunciar post Postado Julho 14, 2014 Como eu disse em outro tópico, PDO não é um ORM, essa fantasia que uns zé da paçoca criaram que usando o PDO dá pra mudar para qualquer BD a qualquer momento beira o ridículo... isso é a legítima coisa de alguém que sempre usou o MySQL e acha que tudo funciona exatamente igual... tenta mudar de um Oracle pro MySQL e vocês vão ver que a coisa não é nem de perto tão simples assim, se fosse não haveria necessidade de existir o ORM para suprir este tipo de coisa. Sério que por ele ser OO o torna mais seguro???? Poderia me citar uma fonte confiável no mundo da programação que diz que algo OO é mais seguro do que o procedural??? ESerra o que eu quis dizer é em relação aos drivers, você pode alternar de drivers a qualquer momento. Isso acaba dando maior flexibilidade. Até mesmo se formos fazer uma simples paginação em MySQL e depois precisarmos mudar para SQL Server irá dar problema, pelo fato do SQL Server não suportar o LIMIT. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Julho 14, 2014 ESerra o que eu quis dizer é em relação aos drivers, você pode alternar de drivers a qualquer momento. Isso acaba dando maior flexibilidade. Até mesmo se formos fazer uma simples paginação em MySQL e depois precisarmos mudar para SQL Server irá dar problema, pelo fato do SQL Server não suportar o LIMIT. Sério que você quis dizer isto??? Olha a sua frase: Se amanhã ou depois seu cliente decidir migrar de MySQL para PostgreSQL, você apenas irá ter que alterar 1 linha, indicando ao PDO qual será o novo banco de dados Francamente, não vejo onde está toda essa flexibilidade que você fala... alterar uma linha e depois rever todas as consultas... uau, que vantagem... de qualquer sorte também recomendo o PDO, não porque ele tem "flexibilidade" ou qualquer uma dessas ladainhas, mas porque ele é mais maduro em termos de desenvolvimento e só. Compartilhar este post Link para o post Compartilhar em outros sites
Pedro Roccon 9 Denunciar post Postado Julho 14, 2014 Sério que você quis dizer isto??? Olha a sua frase: Se amanhã ou depois seu cliente decidir migrar de MySQL para PostgreSQL, você apenas irá ter que alterar 1 linha, indicando ao PDO qual será o novo banco de dados Francamente, não vejo onde está toda essa flexibilidade que você fala... alterar uma linha e depois rever todas as consultas... uau, que vantagem... de qualquer sorte também recomendo o PDO, não porque ele tem "flexibilidade" ou qualquer uma dessas ladainhas, mas porque ele é mais maduro em termos de desenvolvimento e só. Bom, pelo menos entre MySQL e PostgreSQL eu não tive nenhum problema com as consultas, foi só alterar os drivers mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Julho 14, 2014 Um ano e meio atrás li um tutorial que me tiraram algumas dúvidas sobre isso, no meu caso era sobre o desempenho e velocidade, este: http://code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059 Vida longa ao Evernote :clap: Tradução e adaptação: As funções do mysql_ você tem que ter cuidado para escapar cada bit de dados que você está injetando nele, e se você não escapar toda a sua aplicação pode ser destruída por uma vulnerabilidade. http://sqlmap.org/ Há uma série de razões para usar uma dessas duas novas interfaces PDO, Mysqli, mas o mais importante é que o mysql_query é simplesmente demasiado e perigosa, para usar em código de produção. Conexão Tanto o MySQLi ou PDO é extremante fácil a conexão: // PDO $pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); // mysqli, procedural way $mysqli = mysqli_connect('localhost','username','password','database'); // mysqli, object oriented way $mysqli = new mysqli('localhost','username','password','database'); Suporte API Ambos PDO e MySQLi oferece uma API orientada a objetos, mas MySQLi também oferece uma API procedural - o que torna mais fácil para os recém-chegados de entender. Se você estiver familiarizado com o driver MySQL PHP nativo, você vai encontrar a migração para a interface MySQLi procedural muito mais fácil. Por outro lado, uma vez que você domina PDO, você pode usá-lo com qualquer banco de dados que você deseja! A vantagem principal de PDO sobre MySQLi está em seu suporte de driver a banco de dados. Até tempos atrás a PDO suportava 12 DB´s diferentes, ao contrário de MySQLi, que suporta apenas MySQL. Para imprimir uma lista de todos os drivers que PDO suporta atualmente, use o seguinte código: var_dump(PDO::getAvailableDrivers()); O que isto significa? Bem, em situações em que você tem que mudar o seu projeto para usar outro banco de dados, PDO torna o processo transparente. Então, tudo que você tem a fazer é mudar a string de conexão e algumas consultas - se eles usam quaisquer métodos que não são suportados pelo seu novo banco de dados. Com MySQLi, você terá que reescrever cada pedaço de código - consultas incluído. Parâmetros nomeados Esta é outra característica importante que tem PDO, os parâmetros de ligação é consideravelmente mais fácil do que usar o teclado numérico de ligação: PDO: $params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); $pdo->prepare(' SELECT * FROM users WHERE username = :username AND email = :email AND last_login > :last_login'); $pdo->execute($params); MySQLi: $query = $mysqli->prepare(' SELECT * FROM users WHERE username = ? AND email = ? AND last_login > ?'); $query->bind_param('sss', 'test', $mail, time() - 3600); $query->execute(); O parâmetro ? "ponto de interrogação" de ligação pode parecer menor, mas não é tão flexível como parâmetros nomeados, devido ao fato de que o desenvolvedor deve sempre acompanhar a ordem de parâmetro. Infelizmente, MySQLi não suporta parâmetros nomeados . Sobre o Mapeamento Ambos PDO e MySQLi pode mapear os resultados para objetos. Isto vem a calhar se você não quiser usar uma camada de abstração de banco de dados personalizado, mas ainda quer comportamento ORM-like. Vamos imaginar que temos um usuário de classe com algumas propriedades, que correspondem nomes de campo a partir de um banco de dados. class User { public $id; public $first_name; public $last_name; public function info() { return '#'.$this->id.': '.$this->first_name.' '.$this->last_name; } } Sem mapeamento do objeto, era necessário preencher o valor de cada campo (manualmente ou através do construtor). Segurança Ambas as bibliotecas oferecem segurança contra injeção de SQL, só que desenvolvedor tem que usa-la de maneira correta. Velocidade Embora ambos PDO e MySQLi ser bastante rápido, MySQLi É insignificantemente mais rápido em benchmarks - 2,5% para as demonstrações não-preparados, e 6,5% para os mais preparados. Ainda assim, a extensão nativa do MySQL é mais rápido do que ambos. Então, se você realmente precisa espremer até a última gota de desempenho, que é uma coisa que você pode considerar. Resumo Em última análise, PDO ganha esta batalha com facilidade. Com suporte para doze pilotos diferentes de banco de dados (dezoito bases de dados diferentes!) E parâmetros nomeados, podemos ignorar a pequena perda de desempenho, e se acostumar com a sua API. Do ponto de vista de segurança, ambos são seguros, desde que o desenvolvedor usa-los da maneira que deveriam ser usados (leia-se: declarações preparadas). Minha opinião Deixei de usar mysql e mysqli a muito tempo, na época a PDO não tinha um documentação relevante, tutorias que falavam a respeito eram uns gatos pingados e mesmo assim fui para cima. E o que mais vejo ainda, é a resistência a PDO que hoje possui uma vasta documentação e tutorias. Compartilhar este post Link para o post Compartilhar em outros sites