Nenhum!
Seu primeiro exemplo usa uma função que foi removida do PHP anos atrás.
mysql_query()
não existe e não deve mais ser usado. A razão pela qual ele foi removido é que você deve usar instruções preparadas. Eles são fornecidos por extensões mysqli ou PDO. Seu segundo exemplo é melhor, mas é muito confuso.
- Você não deve
echo mysqli_query
. Não há nada útil para ser impresso a partir desta função. - Adquira o hábito de usar instruções preparadas o tempo todo e use marcadores de posição para dados variáveis. A partir de agora suas consultas são constantes, mas usar instruções preparadas ainda é uma boa prática caso você precise adicionar um parâmetro posteriormente.
- Evite usar funções como
mysqli_fetch_array()
. Iterar a opção de resultado uma a uma é confuso e raramente útil. - Nunca verifique o valor de retorno das chamadas mysqli. É inútil. Em vez disso, habilite o relatório de erros. Consulte Como obter a mensagem de erro no MySQLi?
- Sempre defina o conjunto de caracteres correto. Deve ser
utf8mb4
99% do tempo. - A consulta SQL pode ser salva em uma variável separada, mas qual é o objetivo? Você só vai passá-lo como um argumento para a
query
função. Não há necessidade de usar uma variável intermediária. - Não use mysqli. Você deve usar PDO em vez disso. Se você tiver que usar mysqli, crie uma função ou classe wrapper simples para essa finalidade e execute sua função genérica em vez de brincar com funções mysqli.
Aqui está um exemplo de como eu faria isso. Primeiro habilito o relatório de erros para o mysqli, abro a conexão e defino o charset. Então eu declaro uma função que recebe 3 parâmetros e retorna um array. O primeiro parâmetro é sua conexão com o banco de dados que você acabou de abrir. A segunda é sua consulta SQL com espaços reservados, se houver. O terceiro é opcional e é uma matriz de valores a serem vinculados aos espaços reservados como parâmetros. Esta função funciona para todos os tipos de consultas SQL. O resto do código se torna realmente simples.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli("myserver.com", "test", "sunil7117", "test");
$link->set_charset('utf8mb4'); // always set the charset
/**
* Executes an SQL query on the database.
*
* @param \mysqli $mysqli
* @param string $query e.g. SELECT * FROM users WHERE username=?
* @param array $params An array of parameters to be bound in the given order to the placeholders in SQL
* @return array
*/
function prepared_query(\mysqli $mysqli, string $query, array $params = []): array {
$stmt = $mysqli->prepare($query);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
return null;
}
prepared_query($link, "UPDATE user SET email='[email protected]' WHERE email='[email protected]' LIMIT 1");
echo "<br>";
$result = prepared_query($link, "SELECT * FROM user");
echo "welcome to database<br>";
if ($result) {
$row = $result[0];
echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}