Erreur entre PHP et BD mysql - SQL/NoSQL - Programmation
Marsh Posté le 20-11-2007 à 22:53:40
ReplyMarsh Posté le 20-11-2007 à 22:54:18
ok je te remercie, j'ai modifié. Pour le moment je fais des tests avant de l'insérer concrètement sur le site donc ça ne risque pas grand chose.
Marsh Posté le 20-11-2007 à 23:22:45
MagicBuzz a écrit : ouais, moi j'ai ça comme email :
|
Je reconnais qu'il n'est pas pruduent de laisser ce genre d'ouverture mais arrêtez de toujours répondre ça!
Citation : mysql_query() envoie une seule requête (les requêtes multiples ne sont pas supportées) à la base de données courante sur le serveur associé avec le link_identifier spécifié. |
Marsh Posté le 21-11-2007 à 09:40:21
dwogsi a écrit :
|
ben à ce moment, dans le login, le truc qui marche dans 99,9% des cas...
|
Y'as d'autres mécanismes que xxxxx_query(), qui permettent de :
1/ ganger en performances
2/ gagner en lisibilité
3/ ne pas polluer son code à grand coups d'échappement automatiques des quotes (que ce soit real_escape() ou magicquotes)
4/ permettre des contrôles de type en amont de l'exécution
5/ gagner en portabilité (pour rappel, \' N'EST PAS LE CARACTERE D'ECHAPPEMENT DE LA QUOTE DANS LA NORME SQL !)
Donc UTILISEZ LES !
mysql_query() ça date d'un autre âge, à l'époque où MySQL ne savait même pas faire une jointure "inner join" sans planter. Il serait temps d'évoluer un peu. Quandun gars demande de l'aide sur le forum pour du HTML et se pointe avec un <table> ou un <font color="red">, tout le monde lui vole dans les plumes en disant que c'est de la merde, qu'il faut plus l'utiliser et tout ça.
Alors je ne cèderai pas, quand je vois un accès à une base écrit comme une merde des années 70, ça me fait hurler, et vous pourrez bien dire tout ce que vous voudrez, je ne changerai pas ma façon de dire ce que je pense
Marsh Posté le 21-11-2007 à 10:30:10
là ça m'intéresse... En l'occurence, j'utilise un wrapper pour tout ce qui est accès à la base requêtes et tout le tintouin, mais qu'est-ce qui peut être significativement plus rapide qu'un mysql(i)_query() ou mysql(i)_real_query()?
Marsh Posté le 21-11-2007 à 10:36:29
http://maximilian.developpez.com/m [...] tatements/
Y'a peut-être plus de détails dans la doc PHP officielle.
Je sais qu'il y a aussi une lib (standard ?) qui permet d'ajouter un iveau d'abstraction supplémentaire, et ainsi permet de faire abstraction du SGBD utilisé, ce qui est assez pratique pour un développement dans une optique de portabilité.
Marsh Posté le 21-11-2007 à 10:41:27
MagicBuzz > Le "zend framework" permet d'avoir un bon niveau d'abstraction et il doit surement y en avoir d'autres.
Marsh Posté le 21-11-2007 à 10:41:28
Ha, oui, les requêtes préparées... Plus que le côté perfs, c'est le côté sécurité qui m'a intéressé là-dedans. J'en avais parlé y'a assez longtemps sur le topic des développeurs de forum, mais ça n'avait pas tenté grand monde!
Marsh Posté le 21-11-2007 à 10:48:21
moi je ne jure que par ça.
la syntaxe est à peine plus lourde, mais en revanche tu es sûr de ce qui est exécuté.
et avec MySQL > 5, des optimisations supplémentaires ont été apportées, ce qui améliore considérablement les perfs.
la doc de SQL Server est bien plus verbeuse que cet article, et s'applique en gros à tous les SGBD qui supportent ce type de requête (c'est à dire, à ma connaissance, tous).
à noter par contre que je ne sais pas si mysql support le paramètres nommés. ça améliore considérablement la lisibilité des requêtes (ça donne un peu comme dans le post de lofo7, sauf que tu trouves des "@toto" ou ":toto" au lieu de "$toto" dans tes requêtes. c'est plus lisible que des "?" )
Marsh Posté le 21-11-2007 à 11:36:19
y doit bien exister des tests quelque part, mais a priori une requete préparée pourrait même être plus rapide car si elle est exécutée de multiple fois le sgbd ne doit pas la recompiler a chaque fois.
Perso je pense qu'il n'y a que des avantages
Marsh Posté le 21-11-2007 à 11:46:05
MagicBuzz a écrit : Alors je ne cèderai pas, quand je vois un accès à une base écrit comme une merde des années 70, ça me fait hurler, et vous pourrez bien dire tout ce que vous voudrez, je ne changerai pas ma façon de dire ce que je pense |
Non mais je suis tout à fait d'accord avec toi. Je signalait juste que l'exemple qui est souvent donné ne fonctionne pas.
Marsh Posté le 21-11-2007 à 11:59:13
Perso, je préfère largement PDO à mysqli...
A noter également pour ceux qui ne pourraient installer ces extensions qu'il existe de nombreuses librairies d'abstaction qui permettent de se servir de prepared statement ( ma favorite étant adodb)
casimimir a écrit : y doit bien exister des tests quelque part, mais a priori une requete préparée pourrait même être plus rapide car si elle est exécutée de multiple fois le sgbd ne doit pas la recompiler a chaque fois. |
Nan mais un sgbd ça "compile" pas les requêtes hein On parle de "plan d'éxécution".
Mais tu as raison sur le fond. Au "prepare", le plan d'éxécution de la requête est memorisé pour pouvoir être ré-utilisé lors de chaque execute.
Marsh Posté le 21-11-2007 à 12:29:27
c'est ce que je voulais dire, compiler était un résumé, mais oui je voulais dire que la requete était passée par le parser et l'optimizer, encore que la requete stockée sera une version hashée je crois, donc allez, moitié moitié ^^
Marsh Posté le 20-11-2007 à 22:40:09
Bonjour,
j'ai créé ma base de données et un formulaire d'inscription à un espace membre. Alors lorsque je remplis le formulaire et que je le soumets, j'obtiens cette erreur :
Erreur : Column count doesn't match value count at row 1
Mon problème je pense vient de l'insertion de données, dans ma base, de mon formulaire de type "radio". Je demande si les membres veulent s'inscrire à la newletter donc ils ont une case à cocher.
voici ma base :
le script pour l'inscription :
et le script de vérification :
Je vois pas d'où peut venir l'erreur. Si vous avez une idée...
Merci
Max