sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la mejor manera de escribir código PHP para insertar datos?

¡Tampoco!

Su primer ejemplo usa una función que se eliminó de PHP hace años. mysql_query() no existe y no debe usarse más. La razón por la que se eliminó es que debe usar declaraciones preparadas en su lugar. Son proporcionados por extensiones mysqli o PDO.

Su segundo ejemplo es mejor, pero es demasiado complicado.

  • No debe echo mysqli_query . No hay nada útil que imprimir desde esta función.
  • Adquiera el hábito de usar declaraciones preparadas todo el tiempo y use marcadores de posición para datos variables. A partir de ahora, sus consultas son constantes, pero usar declaraciones preparadas sigue siendo una buena práctica en caso de que necesite agregar un parámetro más adelante.
  • Evite usar funciones como mysqli_fetch_array() . Iterar la opción de resultado una por una es complicado y rara vez útil.
  • Nunca verifique el valor de retorno de las llamadas mysqli. Carece de sentido. Habilite el informe de errores en su lugar. Consulte ¿Cómo obtener el mensaje de error en MySQLi?
  • Establece siempre el juego de caracteres correcto. Debería ser utf8mb4 99% del tiempo.
  • La consulta SQL se puede guardar en una variable separada, pero ¿cuál es el punto? Solo lo pasará como argumento a la query función. No hay necesidad de usar una variable intermedia.
  • No use mysqli. Debería usar PDO en su lugar. Si tiene que usar mysqli, cree una función o clase contenedora simple para este propósito y ejecute su función genérica en lugar de jugar con las funciones de mysqli.

Aquí hay un ejemplo de cómo lo haría. Primero habilito el informe de errores para mysqli, abro la conexión y configuro el juego de caracteres. Luego declaro una función que toma 3 parámetros y devuelve una matriz. El primer parámetro es la conexión de su base de datos que acaba de abrir. La segunda es su consulta SQL con marcadores de posición, si los hay. El tercero es opcional y es una matriz de valores que se vinculará a los marcadores de posición como parámetros. Esta función funciona para todo tipo de consultas SQL. El resto del código se vuelve realmente 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>";
}