Clase de ayuda PdoWrapper PDO

Flight viene con una clase de ayuda para PDO. Le permite consultar fácilmente su base de datos con toda la locura de preparar/ejecutar/obtenerTodo(). Simplifica en gran medida cómo puede consultar su base de datos. Cada resultado de fila se devuelve como una clase Flight Collection que le permite acceder a sus datos mediante la sintaxis de matriz o la sintaxis de objeto.

Registrando la Clase de Ayuda PDO

// Registrar la clase de ayuda PDO
Flight::register('db', \flight\database\PdoWrapper::class, ['mysql:host=localhost;dbname=cool_db_name', 'usuario', 'contraseña', [
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'utf8mb4\'',
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_STRINGIFY_FETCHES => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
]);

Uso

Este objeto extiende PDO, por lo que todos los métodos normales de PDO están disponibles. Los siguientes métodos se agregan para facilitar la consulta a la base de datos:

runQuery(string $sql, array $params = []): PDOStatement

Úselo para INSERTS, UPDATES o si planea usar un SELECT en un bucle while

$db = Flight::db();
$statement = $db->runQuery("SELECT * FROM table WHERE something = ?", [ $algo ]);
while($row = $statement->fetch()) {
    // ...
}

// O escribir en la base de datos
$db->runQuery("INSERT INTO table (nombre) VALUES (?)", [ $nombre ]);
$db->runQuery("UPDATE table SET nombre = ? WHERE id = ?", [ $nombre, $id ]);

fetchField(string $sql, array $params = []): mixed

Extrae el primer campo de la consulta

$db = Flight::db();
$count = $db->fetchField("SELECT COUNT(*) FROM table WHERE something = ?", [ $algo ]);

fetchRow(string $sql, array $params = []): array

Extrae una fila de la consulta

$db = Flight::db();
$row = $db->fetchRow("SELECT id, nombre FROM table WHERE id = ?", [ $id ]);
echo $row['nombre'];
// o
echo $row->nombre;

fetchAll(string $sql, array $params = []): array

Extrae todas las filas de la consulta

$db = Flight::db();
$rows = $db->fetchAll("SELECT id, nombre FROM table WHERE something = ?", [ $algo ]);
foreach($rows as $row) {
    echo $row['nombre'];
    // o
    echo $row->nombre;
}

Nota para la sintaxis de IN()

Esto también tiene un envoltorio útil para las declaraciones IN(). Simplemente puede pasar un signo de interrogación como marcador de posición para IN() y luego un array de valores. Aquí hay un ejemplo de cómo podría verse eso:

$db = Flight::db();
$nombre = 'Bob';
$ids_compañía = [1,2,3,4,5];
$rows = $db->fetchAll("SELECT id, nombre FROM table WHERE nombre = ? AND company_id IN (?)", [ $nombre, $ids_compañía ]);

Ejemplo Completo

// Ruta de ejemplo y cómo usar este envoltorio
Flight::route('/usuarios', function () {
    // Obtener todos los usuarios
    $usuarios = Flight::db()->fetchAll('SELECT * FROM users');

    // Transmitir todos los usuarios
    $declaración = Flight::db()->runQuery('SELECT * FROM users');
    while ($usuario = $declaración->fetch()) {
        echo $usuario['nombre'];
        // o echo $usuario->nombre;
    }

    // Obtener un usuario único
    $usuario = Flight::db()->fetchRow('SELECT * FROM users WHERE id = ?', [123]);

    // Obtener un valor único
    $count = Flight::db()->fetchField('SELECT COUNT(*) FROM users');

    // Sintaxis especial de IN() para ayudar (asegúrese de que IN esté en mayúsculas)
    $usuarios = Flight::db()->fetchAll('SELECT * FROM users WHERE id IN (?)', [[1,2,3,4,5]]);
    // también se podría hacer esto
    $usuarios = Flight::db()->fetchAll('SELECT * FROM users WHERE id IN (?)', [ '1,2,3,4,5']);

    // Insertar un nuevo usuario
    Flight::db()->runQuery("INSERT INTO users (nombre, email) VALUES (?, ?)", ['Bob', 'bob@example.com']);
    $id_insertado = Flight::db()->lastInsertId();

    // Actualizar un usuario
    Flight::db()->runQuery("UPDATE users SET nombre = ? WHERE id = ?", ['Bob', 123]);

    // Eliminar un usuario
    Flight::db()->runQuery("DELETE FROM users WHERE id = ?", [123]);

    // Obtener el número de filas afectadas
    $declaración = Flight::db()->runQuery("UPDATE users SET nombre = ? WHERE nombre = ?", ['Bob', 'Sally']);
    $filas_afectadas = $declaración->rowCount();

});