Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Posso substituir cegamente todas as funções mysql_ por mysqli_?


A resposta curta é não , as funções não são equivalentes.

A boa notícia é que existe uma ferramenta de conversão que o ajudará se você tiver muitas chamadas/projetos para alterar. Isso permitirá que seus scripts funcionem imediatamente.

https://github.com/philip/MySQLConverterTool

É uma versão bifurcada da versão original do Oracle e é kosher.

Dito isso, não é muito difícil atualizar seu código e você pode querer migrar para uma metodologia orientada a objetos de qualquer maneira ...

1) A conexão

Para todos os efeitos, você precisa de uma nova função de conexão que salve a conexão como uma variável PHP, por exemplo;
$mysqli = new mysqli($host, $username, $password, $database);

Observe que salvei a conexão em $mysqli . Você pode salvar em $db ou o que você quiser, mas você deve usar isso em todo o seu código para fazer referência à conexão.

Lembre-se de habilitar o relatório de erros para mysqli antes de abrir a conexão;
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) A consulta

Nota:Você deve se proteger contra injeção de SQL com instruções preparadas, que estão disponíveis no MySQLi. Dê uma olhada em Como posso evitar injeção de SQL no PHP? , mas vou abordar apenas o básico aqui.

Agora você precisa incluir a conexão como um argumento em sua consulta e outros mysqli_ funções. No código procedural é o primeiro argumento, no OO você escreve como um método de classe.

Processual:
$result = mysqli_query($mysqli, $sql);

OO:
$result = $mysqli->query($sql);

3) Buscar resultado

A busca do resultado é semelhante ao antigo mysql_ função processual;
while ($row = mysqli_fetch_assoc($result))

mas como $result agora é um objeto no mysqli, você pode usar a chamada de função de objeto;
while ($row = $result->fetch_assoc())

4) Fechar conexão

Assim como antes, você precisa incluir a conexão na função close; como argumento em processo;
mysqli_close($mysqli);

e como o objeto no qual você executa a função em OO;
$mysqli->close();

Eu estaria aqui para sempre se eu passasse por todos eles, mas você entendeu. Dê uma olhada na a documentação Para maiores informações. Não se esqueça de converter qualquer função de fechamento de conexão, liberação de resultado ou função de contagem de erros e linhas que você tenha.

A regra básica é para funções que usam a conexão de banco de dados, você precisa incluí-la na função agora (como o primeiro argumento em procedural ou o objeto que você usa para chamar a função em OO), ou para um conjunto de resultados você pode apenas alterar a função para mysqli_ ou use o conjunto de resultados como o objeto.