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

consulta abreviada de PDO

Así que tienes una respuesta para la pregunta "¿Por qué recibo este error?", pero no obtuviste una para la "consulta abreviada de PDO".

Para esto necesitaremos algo llamado "programación".

Una cosa interesante de la programación es que no estamos limitados a las herramientas existentes, como ocurre con otras profesiones. Con la programación, siempre podemos crear una herramienta propia y luego comenzar a usarla en lugar de un conjunto completo de herramientas antiguas.

Y la Programación Orientada a Objetos es especialmente buena en eso, ya que podemos tomar un objeto existente y simplemente agregarle algunas funciones, dejando el resto como está.

Por ejemplo, imagine que queremos una forma abreviada de ejecutar una consulta preparada en PDO. Todo lo que necesitamos es extender el objeto PDO con un nuevo método abreviado. La parte más difícil es darle un nombre al nuevo método.

El resto es simple:solo necesitas unas pocas líneas de código

class MyPDO extends PDO
{
    public function run($sql, $bind = NULL)
    {
        $stmt = $this->prepare($sql);
        $stmt->execute($bind);
        return $stmt;
    }
}

Este es todo el código necesitas. Puede almacenarlo en el mismo archivo donde almacena las credenciales de su base de datos. Tenga en cuenta que esta adición no afectará su código existente de cualquier manera, permanece exactamente igual y puede continuar utilizando todas las funciones PDO existentes como de costumbre.

Ahora debe cambiar solo 2 letras en el constructor PDO, llamándolo como

$conn = new MyPDO(...the rest is exactly the same...);

E inmediatamente puede comenzar a usar su nueva y brillante herramienta:

$sql = "SELECT * FROM myTable WHERE id = :id";
$result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);

O, dándole un poco de optimización,

$result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();

ya que siempre puede establecer el modo de recuperación predeterminado de una vez por todas, y para una sola variable no hay uso para el marcador de posición nombrado. Lo que hace de este código una verdadera taquigrafía en comparación con la respuesta aceptada,

$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id]);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);

e incluso a la mejor respuesta que hayas obtenido hasta ahora,

$result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result->execute([$id]);

sin mencionar que este último no siempre se puede usar, ya que solo sirve para obtener una matriz. Mientras que con un real abreviatura cualquier formato de resultado es posible:

$result = $conn->run($sql, [$id])->fetchAll(); // array
$result = $conn->run($sql, [$id])->fetch(); // single row
$result = $conn->run($sql, [$id])->fetchColumn(); // single value
$result = $conn->run($sql, [$id])->fetchAll(PDO::FETCH_*); // dozens of different formats