Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Alors que je développe un adaptateur MS SQL pour mon framework PHP, c'est sans souci que j'ai pu le faire se connecter à la base de données, créer, éditer et supprimer des entrées.

Mais la méthode pour récupérer l'identifiant de la dernière entrée insérée me retourne systématiquement une erreur. J'essaie SELECT @@IDENTITY;, puis SELECT SCOPE_IDENTITY();… Rien n'y fait, ces instructions sont inconnues. Je cherche sur Internet pendant des heures pour déterminer s'il y a un soucis avec PDO, DB LIB (le pilote pour MS SQL), ou SQL Server.

Je trouve un bon nombre de topics sur le sujet, mais rien ne convient exactement à mon problème (« Undefined function SCOPE_IDENTITY() »).

J'aurais dû remarquer que les données insérées via PHP n'étaient pas les mêmes que celles sur Microsoft SQL Server Management Studio. Pour tester, j'ai la même base de données sous MySQL, PostgreSQL et MS SQL… Il était connecté à celle de PostgreSQL.
En matière de problème dû à l'utilisateur, on est jamais mieux servi que par soi-même. PEBKAC.
PEBKAC #7884 proposé par Cartman34 le 29/05/2013 | 10 commentaires | 👍🏽 👎🏽 +112
+1 pour la dernière phrase.
Commentaire #94762 écrit par ROB le 29/05/2013 à 18h49 | 👍🏽 👎🏽
-1 pour tout le reste: j'y capte rien
Commentaire #94771 écrit par Florent le 29/05/2013 à 19h00 | 👍🏽 👎🏽
À tes souhaits !
Commentaire #94776 écrit par Lynix le 29/05/2013 à 19h19 | 👍🏽 👎🏽
Si j'ai bien compris, il faisait des tests dans une syntaxe pour une base dans un environnement relié à une autre, incompatible mais je t'avoue que je ne suis sûr de rien
Commentaire #94780 écrit par Taiki le 29/05/2013 à 19h24 | 👍🏽 👎🏽
Il n'était tout simplement pas connecté à la bonne base de données, donc les fonctions natives de SQL Server n'étaient pas reconnues.
Commentaire #94781 écrit par Acorah le 29/05/2013 à 19h24 | 👍🏽 👎🏽
Bon, je fait mon obvious :

Il est ici en présence des 3 grands logiciels de gestion de BDD (MySQL / PostgreSQL / M$ SQL).
Il cherche à exploiter du code pour MySQL sur le logiciel M$ SQL.

Il utilise pour ses test un script PHP, qui doit donc récupérer les info de la base M$ pour faire la jonction avec le reste du code.

C'est là que ça coince, toutes les méthodes classique sortent une erreur, et peu importe les tentatives.

À la fin il se rend quand même compte qu'il essayer de "parler" avec une base PostgreSQL avec le langage adapté à M$, ce qui forcément risque de pas marcher.

Ça revient sur une console SSH à tester des commendes UNIX pointues sur un serveur Microsoft : ça risque pas de marcher...

retire sa cape et son caleçon
remet quand même un caleçon, fait pas très chaud...
Commentaire #94809 écrit par blag le 29/05/2013 à 22h34 | 👍🏽 👎🏽
Alors ouiiii, euuuh... Faut connaître un peu les bases de données.
En très résumé, j'ai essayé d'exécuter des instructions sur un serveur SQL Microsoft, j'ai eu des erreurs, jusqu'à ce que je me rende compte que le serveur auquel je suis connecté est un PostgreSQL et que la méthode pour récupérer l'identifiant de la dernière ligne insérée est la seule qui diffère réellement.

Désolé si c'est un peu technique, mais c'est pour ça que j'abstrais (je le fais une fois, je lis la doc à fond, je boucle ça et puis j'oublie :D).

Pour ceux qui se disent "Késako Adaptateur ?", alors de manière générale, un adaptateur c'est une classe qui permet d'interfacer 2 technologies différentes afin de les utiliser plus facilement (et de manière automatisée).
Ici, ça permet d'envoyer des requêtes SQL à l'aide de code PHP, donc on n'a plus besoin de connaître la syntaxe SQL et ça fonctionne de la même manière que ce soit le SGBD (abstraction powa).
Commentaire #94990 écrit par Cartman34 le 30/05/2013 à 17h41 | 👍🏽 👎🏽
Je pense qu'il aurait été plus pertinent d'utiliser PDO, ce superbe module de PHP qui fait déjà cela très bien.

Ainsi, avec la méthode LastInsertID de l'objet PDO (=> http://fr2.php.net/manual/fr/pdo.lastinsertid.php) tout aurait fonctionner directement sans se poser de questions de syntaxes (et c'est à cela que sert PDO, à ne pas s'embêter avec la syntaxe) [Note : cette méthode retourne 0 si la transaction a déjà été commit, attention à l'ordre des opérations]

Après, je comprend le besoin de s'amuser à ré-inventer la roue, on l'a tous fait.
Commentaire #95053 écrit par Meuh le 31/05/2013 à 00h09 | 👍🏽 👎🏽
Alors madame la vache, j'utilise déjà PDO mais PDO n'abstrait rien et sa méthode lastInsertId() ne fonctionne pas avec tous les SGBD (MS SQL et PostgreSQL il me semble). Donc quand ça fonctionne pas et qu'on en a besoin, on le fait soi même.
Enfin, j'ai bien parlé de PDO et DB LIB (une lib PDO).

Alors les vaches kissikonaisse ...
Commentaire #95068 écrit par Cartman34 le 31/05/2013 à 08h44 | 👍🏽 👎🏽
Pour information, MS SQL est compatible avec LastInsertID depuis un petit moment (au moins plusieurs mois), via le dernier driver fourni par microsoft (http://msdn.microsoft.com/en-us/library/ff628155).
Après, j'avoue que pour PostgreSQL, il y a un soucis au niveau des normes (qui semblerait résolu par les drivers 8.x de PostGreSQL => #83440" rel="external nofollow" class="outbound">http://fr2.php.net/manual/fr/pdo.lastinsertid.php#83440).
Commentaire #95080 écrit par Meuh le 31/05/2013 à 11h48 | 👍🏽 👎🏽