Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quel est le meilleur moyen d'écrire du code PHP pour insérer des données

Ni l'un ni l'autre !

Votre premier exemple utilise une fonction qui a été supprimée de PHP il y a des années. mysql_query() n'existe pas et ne doit plus être utilisé. La raison pour laquelle il a été supprimé est que vous devez plutôt utiliser des instructions préparées. Ils sont fournis par les extensions mysqli ou PDO.

Votre deuxième exemple est meilleur, mais il est beaucoup trop désordonné.

  • Vous ne devez pas echo mysqli_query . Il n'y a rien d'utile à imprimer à partir de cette fonction.
  • Prenez l'habitude d'utiliser tout le temps des instructions préparées et utilisez des espaces réservés pour les données variables. À partir de maintenant, vos requêtes sont constantes, mais l'utilisation d'instructions préparées reste une bonne pratique au cas où vous auriez besoin d'ajouter un paramètre ultérieurement.
  • Évitez d'utiliser des fonctions telles que mysqli_fetch_array() . Itérer l'option de résultat une par une est désordonné et rarement utile.
  • Ne vérifiez jamais la valeur de retour des appels mysqli. C'est inutile. Activez plutôt le rapport d'erreurs. Voir Comment obtenir le message d'erreur dans MySQLi ?
  • Définissez toujours le bon jeu de caractères. Ce devrait être utf8mb4 99% du temps.
  • La requête SQL peut être enregistrée dans une variable distincte, mais à quoi ça sert ? Vous allez seulement le passer comme argument à la query fonction. Il n'est pas nécessaire d'utiliser une variable intermédiaire.
  • N'utilisez pas mysqli. Vous devriez utiliser PDO à la place. Si vous devez utiliser mysqli, créez une fonction ou une classe wrapper simple à cet effet et exécutez votre fonction générique au lieu de jouer avec les fonctions mysqli.

Voici un exemple de comment je le ferais. J'active d'abord le rapport d'erreurs pour mysqli, j'ouvre la connexion et définit le jeu de caractères. Ensuite, je déclare une fonction qui prend 3 paramètres et renvoie un tableau. Le premier paramètre est votre connexion à la base de données que vous venez d'ouvrir. La deuxième est votre requête SQL avec des espaces réservés s'il y en a. Le troisième est facultatif et il s'agit d'un tableau de valeurs à lier aux espaces réservés en tant que paramètres. Cette fonction fonctionne pour tous les types de requêtes SQL. Le reste du code devient vraiment simple.

<?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>";
}