Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Já faz um tempo que ouvi falar dessa função chamada MySQLi. Sempre utilizei a simples funções MySQL, mesmo meu servidor MySQL sendo da versão 5.1.x, e como não achei nenhuma diferência significativa, continuei utilizando a função MySQLi.
A única coisa que eu percebi que era diferente, na verdade, ouvi falar que era diferente, era que com MySQLi o problema de SQL Injection não existiria. Bem, então realizei o seguinte teste:
<?php
// recebo algum variável sem a tratar.
$usuário = $_GET['nome'];
// conecta e seleciona a database
$link = mysqli_connect("localhost", "root", "----", "----") or die (mysqli_connect_error());
// vamos tentar achar algum nome correspondente em minha tabela de testes
$query = "SELECT * FROM tests WHERE usuário='$usuário'";
$result = mysqli_query($link, $query) or die (mysqli_error($link));
// caso tenha retornado algo, vamos exibir uma mensagem
if(mysqli_num_rows($result) > 0){
echo 'Encontrado';
}else{
echo 'Não-Encontrado';
}
?>
Um código muito simples: se a saída é http://localhost/teste.php?nome=whatever'>http://localhost/teste.php?nome=whatever, ele não encontra (pois não existe whatever em meu banco de dados). Porém, se eu por http://localhost/teste.php?nome=whatever'>http://localhost/teste.php?nome=whatever' or 1='1 ele diz ter encontrado algo, ou seja, MySQLi não impede SQL Injection!
Então, quais as diferências? Agradeço à quem poder me ajudar.
Att.
Marcos Knijnik
Carregando comentários...