Maison  >  Questions et réponses  >  le corps du texte

Pourquoi la bibliothèque MySQLi ne prend-elle pas en charge nativement les paramètres nommés ?

Corrigez la syntaxe de requête paramétrée MySQLi à partir de http://php.net/manual/en/mysqli.quickstart.prepared-statements.php :

$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)");
$stmt->bind_param("i", $id);

Mais ne fais jamais ça :

$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (:id_value)");
$stmt->bind_param("i", "id_value", $id);

À mon avis, 命名参数替换是在API级别实现的合理功能。令我惊讶的是,MySQLi 在库中只实现了 未命名参数.

Y a-t-il une raison valable ? Vu comment PDO, DQL, ORM prennent tous des paramètres nommés dans les requêtes, cela n'a aucun sens pour moi.

J'espère que les développeurs MySQLi ne se retrouveront pas dans la situation "nous sommes paresseux et ne voulons pas". Je crois qu'il doit y avoir une bonne raison, et je cherche cette raison, ou un moyen de trouver cette raison. La raison pour laquelle les paramètres nommés ne sont pas implémentés dans la bibliothèque d'extension MySQLi.

P粉024986150P粉024986150328 Il y a quelques jours534

répondre à tous(2)je répondrai

  • P粉792026467

    P粉7920264672023-11-01 09:02:19

    Traditionnellement, MySQLi est l'API MySQL. Il n'ajoute rien en soi, et il y a une raison à cela : l'ajout de fonctionnalités telles que des espaces réservés nommés nécessiterait (si vous y réfléchissez) tout un monstre d'analyse des requêtes SQL. Bien entendu, ce n’est pas le travail de l’API de base de données. Comme indiqué dans d'autres réponses, l'API n'est pas DAL ou DBAL, elles servent à des fins différentes.

    Le PDO est un grand exploit que l’on voit rarement dans une langue, et Wes Furlong est un génie qui a presque à lui seul assumé cette tâche. Mais le PDO est une autre histoire. Il s'agit d'une couche d'abstraction d'accès à la base de données, et pour y parvenir, que cela vous plaise ou non, vous avez besoin d'un analyseur de requêtes. Étant donné que vous disposez déjà d'un analyseur de requêtes et que l'un des pilotes prend déjà en charge les espaces réservés nommés, il est naturel de l'ajouter à tous les pilotes pris en charge. Comme vous pouvez le constater, tout change avec MySQLi.

    Pour faire simple, ce n’est pas « paresseux », mais « paresseux ». Il s'agit de suivre la norme.

    répondre
    0
  • P粉533898694

    P粉5338986942023-11-01 00:14:00

    MYSQLi Les paramètres nommés ne sont pas pris en charge pour deux raisons principales :

    1. Il est "destiné" (j'utilise ce terme de manière vague) à être utilisé avec des emballages, et
    2. Son homologue PDO le fait - et il n'est pas nécessaire de réinventer la roue

    Pour développer le point 1 : mysqli, malgré ses nombreux inconvénients par rapport à mysqli,尽管与 PDO, est facilement comparable à un bon wrapper - c'est-à-dire que les paramètres nommés (entre autres) sont fournis par le wrapper. Il n'est pas pris en charge par mysqli lui-même. C'est intentionnel et pour une seule raison :

    1. Mysqli Conçue pour être une bibliothèque rapide et flexible.

    Si les développeurs intègrent plus de fonctionnalités dans la bibliothèque de base, contre-intuitivement, elle devient moins flexible et prend plus de temps à charger/exécuter.

    mysqlipdo Les deux ont été publiés avec PHP 5 (je crois que la version PDO est 5.3), ils ont donc des utilisations différentes.

    Voulez-vous un temps d'exécution plus rapide ? Utilisez mysqli sans wrappers. Voulez-vous des paramètres nommés ? Utilisez mysqli。您想要命名参数吗?使用 PDO 或构建 mysqli ou créez un wrapper mysqli pour gérer cela - mais sachez que cela ralentira votre temps d'exécution.

    répondre
    0
  • Annulerrépondre