sql >> Database >  >> RDS >> Mysql

Wat is een betere manier om PHP-code te schrijven voor het invoegen van gegevens?

Geen van beide!

Je eerste voorbeeld gebruikt een functie die jaren geleden uit PHP is verwijderd. mysql_query() bestaat niet en mag niet meer worden gebruikt. De reden waarom het is verwijderd, is dat u in plaats daarvan voorbereide verklaringen moet gebruiken. Ze worden geleverd door mysqli- of PDO-extensies.

Je tweede voorbeeld is beter, maar het is veel te rommelig.

  • Je moet niet echo mysqli_query . Er is niets nuttigs om uit deze functie te printen.
  • Maak er een gewoonte van om altijd voorbereide uitspraken te gebruiken en plaatsaanduidingen te gebruiken voor variabele gegevens. Vanaf nu zijn uw zoekopdrachten constant, maar het is nog steeds een goede gewoonte om voorbereide instructies te gebruiken voor het geval u later een parameter moet toevoegen.
  • Vermijd het gebruik van functies zoals mysqli_fetch_array() . Het één voor één herhalen van de resultaatoptie is rommelig en zelden nuttig.
  • Controleer nooit de retourwaarde van mysqli-aanroepen. Het is zinloos. Schakel in plaats daarvan foutrapportage in. Zie Hoe krijg ik de foutmelding in MySQLi?
  • Stel altijd de juiste tekenset in. Het moet utf8mb4 . zijn 99% van de tijd.
  • De SQL-query kan in een aparte variabele worden opgeslagen, maar wat heeft het voor zin? Je gaat het alleen als argument doorgeven aan de query functie. Het is niet nodig om een ​​tussenliggende variabele te gebruiken.
  • Gebruik geen mysqli. U moet in plaats daarvan PDO gebruiken. Als je mysqli moet gebruiken, maak dan een eenvoudige wrapper-functie of -klasse voor dit doel en voer je generieke functie uit in plaats van te rommelen met mysqli-functies.

Hier is een voorbeeld van hoe ik het zou doen. Eerst schakel ik foutrapportage voor mysqli in, ik open de verbinding en stel de charset in. Vervolgens verklaar ik een functie die 3 parameters nodig heeft en een array retourneert. De eerste parameter is uw databaseverbinding die u zojuist hebt geopend. Ten tweede is uw SQL-query met tijdelijke aanduidingen als die er zijn. De derde is optioneel en het is een reeks waarden die als parameters aan de tijdelijke aanduidingen moeten worden gekoppeld. Deze functie werkt voor alle soorten SQL-query's. De rest van de code wordt heel eenvoudig.

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



  1. Hoe een afbeelding in de kamerpersistentiebibliotheek invoegen?

  2. Welk type tijdstempel moet ik kiezen in een PostgreSQL-database?

  3. deelnemen aan door komma's gescheiden gegevenskolom

  4. MySQLdb Python voegt %d en %s in