Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il modo migliore per scrivere codice PHP per inserire dati

Nessuno dei due!

Il tuo primo esempio utilizza una funzione che è stata rimossa da PHP anni fa. mysql_query() non esiste e non dovrebbe più essere utilizzato. Il motivo per cui è stato rimosso è che dovresti invece utilizzare le istruzioni preparate. Sono forniti da estensioni mysqli o PDO.

Il tuo secondo esempio è migliore, ma è troppo disordinato.

  • Non dovresti echo mysqli_query . Non c'è niente di utile da stampare da questa funzione.
  • Abituati a usare sempre le istruzioni preparate e usa i segnaposto per i dati variabili. A partire da ora le tue query sono costanti, ma l'utilizzo di istruzioni preparate è ancora una buona pratica nel caso in cui sia necessario aggiungere un parametro in seguito.
  • Evita di usare funzioni come mysqli_fetch_array() . L'iterazione dell'opzione del risultato una per una è disordinata e raramente utile.
  • Non controllare mai il valore di ritorno delle chiamate mysqli. È inutile. Abilita invece la segnalazione degli errori. Vedi Come ottenere il messaggio di errore in MySQLi?
  • Imposta sempre il set di caratteri corretto. Dovrebbe essere utf8mb4 Il 99% delle volte.
  • La query SQL può essere salvata in una variabile separata, ma qual è il punto? Lo passerai solo come argomento alla query funzione. Non è necessario utilizzare una variabile intermedia.
  • Non usare MySQL. Dovresti usare invece PDO. Se devi usare mysqli, crea una semplice funzione o una classe wrapper per questo scopo ed esegui la tua funzione generica invece di scherzare con le funzioni mysqli.

Ecco un esempio di come lo farei. Per prima cosa abilito la segnalazione degli errori per mysqli, apro la connessione e imposto il set di caratteri. Quindi dichiaro una funzione che accetta 3 parametri e restituisce un array. Il primo parametro è la connessione al database che hai appena aperto. Il secondo è la tua query SQL con i segnaposto se ce ne sono. Il terzo è facoltativo ed è una matrice di valori da associare ai segnaposto come parametri. Questa funzione funziona per tutti i tipi di query SQL. Il resto del codice diventa davvero semplice.

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