sql >> Databasteknik >  >> RDS >> Mysql

Vilket är bättre sätt att skriva PHP-kod för att infoga data

Inte heller!

Ditt första exempel använder funktion som har tagits bort från PHP för flera år sedan. mysql_query() finns inte och bör inte användas längre. Anledningen till att den togs bort är att man istället ska använda förberedda uttalanden. De tillhandahålls av antingen mysqli- eller PDO-tillägg.

Ditt andra exempel är bättre, men det är alldeles för rörigt.

  • Du bör inte echo mysqli_query . Det finns inget användbart att skriva ut från den här funktionen.
  • Ta för vana att använda förberedda uttalanden hela tiden och använd platshållare för variabel data. Från och med nu är dina frågor konstanta, men att använda förberedda uttalanden är fortfarande en bra praxis om du behöver lägga till en parameter senare.
  • Undvik att använda funktioner som mysqli_fetch_array() . Att upprepa resultatalternativet ett efter ett är rörigt och sällan användbart.
  • Kontrollera aldrig returvärdet för mysqli-anrop. Det är meningslöst. Aktivera felrapportering istället. Se Hur får man felmeddelandet i MySQLi?
  • Ställ alltid in rätt teckenuppsättning. Det ska vara utf8mb4 99% av tiden.
  • SQL-frågan kan sparas i en separat variabel, men vad är poängen? Du kommer bara att skicka det som ett argument till query fungera. Det finns inget behov av att använda en mellanvariabel.
  • Använd inte mysqli. Du bör använda PDO istället. Om du måste använda mysqli, skapa då en enkel wrapper-funktion eller klass för detta ändamål och kör din generiska funktion istället för att krångla med mysqli-funktioner.

Här är ett exempel på hur jag skulle göra. Först aktiverar jag felrapportering för mysqli, jag öppnar anslutningen och ställer in teckenuppsättningen. Sedan deklarerar jag en funktion som tar 3 parametrar och returnerar en array. Den första parametern är din databasanslutning som du just har öppnat. För det andra är din SQL-fråga med platshållare om det finns några. Det tredje är valfritt och det är en rad värden som ska bindas till platshållarna som parametrar. Denna funktion fungerar för alla typer av SQL-frågor. Resten av koden blir riktigt enkel.

<?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. Hur TRIM_ORACLE() fungerar i MariaDB

  2. PHP PDO Bit(1) returnerar fel datatyp

  3. Hur aktiverar jag MySQL-klienten automatiskt återansluta med MySQLdb?

  4. php problem med flera databaser