Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête PDO abrégée

Vous avez donc une réponse à la question "Pourquoi j'obtiens cette erreur", mais vous n'en avez pas eu pour la "requête PDO abrégée".

Pour cela, nous aurons besoin d'un truc appelé "programmation".

Une chose intéressante à propos de la programmation est que nous ne sommes pas limités aux outils existants, comme avec d'autres métiers. Avec la programmation, nous pouvons toujours créer notre propre outil, puis commencer à l'utiliser à la place de tout un ensemble d'anciens outils.

Et la programmation orientée objet est particulièrement efficace dans ce domaine, car nous pouvons prendre un objet existant et simplement ajouter quelques fonctionnalités, laissant le reste tel quel.

Par exemple, imaginons que nous voulions un raccourci pour exécuter une requête préparée dans PDO. Tout ce dont nous avons besoin est de prolonger l'objet PDO avec une nouvelle méthode abrégée. Le plus difficile est de donner un nom à la nouvelle méthode.

Le reste est simple :vous n'avez besoin que de quelques lignes de code

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

C'est tout le code vous avez besoin. Vous pouvez le stocker dans le même fichier où vous stockez vos informations d'identification de base de données. Notez que cet ajout n'affectera pas votre code existant de quelque manière que ce soit - il reste exactement le même et vous pouvez continuer à utiliser toutes les fonctionnalités PDO existantes comme d'habitude.

Maintenant, vous devez changer seulement 2 lettres dans le constructeur PDO, en l'appelant comme

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

Et immédiatement, vous pouvez commencer à utiliser votre nouvel outil :

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

Ou, en lui donnant un peu d'optimisation,

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

comme vous pouvez toujours définir le mode de récupération par défaut une fois pour toutes, et pour une seule variable, il n'y a aucune utilité pour l'espace réservé nommé. Ce qui fait de ce code un véritable raccourci par rapport à la réponse acceptée,

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

et même à la meilleure réponse que vous ayez jusqu'à présent,

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

sans oublier que ce dernier n'est pas toujours utilisable, car il convient uniquement pour obtenir un tableau. Alors qu'avec un réel raccourci tout format de résultat est possible :

$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