Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[PHP][MSSQL-MySQL] Compatibilité des requêtes

masterdim, le jeudi 22 décembre 2005 à 10:26:19
Salut,

J'ai un petit problème:

J'ai une application qui tourne en php sur base MySQL.
Lorsque je migre la base sur MSSQL, tout marche très bien, sauf sur quelques pages, où j'ai un message du genre :

Fatal error: Call to a member function on a non-object in c:\inetpub\wwwroot\... on line 135


A la ligne 135, j'essaie de passer à l'enregistrement suivant dans un while qui parcourt un tableau résultant d'une requête SELECT.

Ce que je ne comprend pas, c'est que ça marche très bien avec MySQL. Je pense qu'il y a un problème de compatibilité avec MSSQL. Qui peut me faire un petit listing des principales différences entre les 2 bases au niveau des requêtes SELECT ?

Merci beaucoup !
Répondre à masterdim  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Jeff, le jeudi 22 décembre 2005 à 11:17:04
C'est surtout que ce ne sont pas les mêmes fonctions...

http://fr.php.net/manual/fr/ref.mssql.php
Webmaster(@)CommentCaMarche.net
>>010000110100001101001101<<
Répondre à Jeff

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
masterdim, le jeudi 22 décembre 2005 à 12:34:13
Je sais et j'en tiens déjà compte !
Sinon le reste ne s'afficherait pas...
Répondre à masterdim

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le lundi 26 décembre 2005 à 05:00:06
Salut,

Fatal error: Call to a member function on a non-object in c:\inetpub\wwwroot\... on line 135

En gros tu es en train d'appeler une methode sur une variable qui n'est pas un objet.

C'est à dire que tu dois avoir à la ligne 135 un truc du style:
$bidule->methode()

Mais le soucis c'est que $bidule n'est pas un objet.

Alors si ça marchait avec mysql et pas mssql, c'est peut être parce que l'objet $bidule était l'instance d'une classe qui faisait appel à un truc qui marchait bien avec mysql et pas bien avec mssql.

Il faudrait voir avec ton script... Vu que cette page à l'air d'être longue essaie de nous mettre le code php dans un fichier texte sur une page web ou autre (avec le code de la classe à laquelle fait référence $bidule)....
Répondre à kilian

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
masterdim, le mercredi 4 janvier 2006 à 09:56:04
Salut Kilian,

Merci pour ton message.
En effet, à cette ligne-là, j'appelle une méthode de la façon suivante :

$resultat_competency_level->MoveNext();

qui me permet donc de passer à l'enregistrement suivant dans un while qui parcourt un tableau résultant d'une requête SELECT.

Le plus étonnant, c'est que non-seulement ça marche avec MySQL, mais surtout je fais l'appel à cette fonction des dizaines et des dizaines de fois dans le logiciel et ça marche partout ailleurs (sauf donc à 3-4 endroits)...

Je peux difficilement vous transmettre le code, car il s'agit d'un gros logiciel intranet de plusieurs dizaines de milliers de lignes de code...

Je suis quasiment certain que c'est au niveau du select que ça déconne, qu'il n'aime pas qqch, mais quoi ???
Ce qui me conforte dans cette idée, c'est que cette erreur à la ligne 135 apparait dans une fonction récursive et que ce n'est pas la même requête à chaque tour (ça bug seulement lorsque l'on est à un endroit précis de la récursivité).

Je vais creuser...
Répondre à masterdim

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mercredi 4 janvier 2006 à 12:56:56
En ce cas, affiche la requête à chaque coup puis repère celle qui est juste avant l'erreur.
On verra ce qui ne va pas dans la requête....
Répondre à kilian

6


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
masterdim, le mercredi 4 janvier 2006 à 14:58:28
Yes, c'est ce que j'ai fait et.... j'ai trouvé !

Dans ma requête, j'ai une condition et les 2 bases n'ont pas la même manière de gérer les conditions.

MSSQL veut des CASE WHEN ... THEN ... ELSE ... END, alors que MYSQL veut des IF( ... , ... , ... )

Voici un code pratique pour ceux qui ont le même problème et dont le code doit pouvoir tourner sur MSSQL et MYSQL:

// Fonction qui construit la fonction sql IF
function sql_if_function($condition, $value, $value_else) {
    global $type_base;
        
    if ($type_base == "mssql" || $type_base == "odbc_mssql") {
        return "CASE WHEN $condition THEN $value ELSE $value_else END";
    } else {
        return "IF($condition,$value,$value_else)";
    }
}


Il suffit d'appeler la fonction dans le select, genre

SELECT sql_if_function(numéro=1, 'ok', 'ko')
FROM table
WHERE condition


Voili voilà. Merci à toi Kilian qui m'a mis sur la voie !
Répondre à masterdim

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mercredi 4 janvier 2006 à 15:02:06
Ben de rien, je connaissais pas cette façon de traiter les conditons en sql....
Répondre à kilian

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
masterdim, le mercredi 4 janvier 2006 à 15:17:42
oui c'est pratique. ça permet d'ajouter des colonnes au résultat de la requête avec le contenu que l'on veut.
Répondre à masterdim

9


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
kilian, le mercredi 4 janvier 2006 à 16:20:51
Ah ok, merci pour l'info.
Je connaissais 'IF EXISTS' ou 'IF NOT EXISTS' avec mysql mais c'est tout...
Répondre à kilian

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
djayt, le lundi 15 octobre 2007 à 11:21:37
Bonjour,
et sinon tu as pear pour gerer toutes sortes de bases d un coup
Répondre à djayt

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 Greg, le jeudi 25 octobre 2007 à 21:06:07
Ou PDO à partir de PHP5
Répondre à Greg

Résultats pour [PHP][MSSQL MySQL] Compatibilité des requêtes

Formulaire : possible sans php ni mysql ? (Résolu) Bonjour Je souhaiterai créer un formulaire pour mon site internet. Sans entrer dans les détails maintenant, je voudrais juste savoir si déjà c'est possible sachant que mon hébergeur n'accepte ni php ni mysql etc... en gros rien de... www.commentcamarche.net/forum/affich-2067904-formulaire-possible-sans-php-ni-mysql
Problème soit PHP soit mySQL .... (Résolu) Bonjour, Soit vous m'aidez ... soit je me jette .... la j'ouvre la fenêtre :) ... Bon .... J'utilise PHP et mySQL.... Voici une morceau de requête : $sql = 'SELECT SUM( M.scorext ) as SetPour, SUM( M.scoredom ) as SetContre FROM... www.commentcamarche.net/forum/affich-3816831-probleme-soit-php-soit-mysql
Besoin d'aide PHP et MySQL (Résolu) Besoin d'aide PHP et MySQL Bonjour tout le monde, Je suis un "petit" nouveau sur le forum ... et j'ai déjà besoin d'un petit coup de main Avant le petit soucis, une courte présentation, je m'appelle Jean, j'ai 23 ans et je... www.commentcamarche.net/forum/affich-3406987-besoin-d-aide-php-et-mysql

Résultats pour [PHP][MSSQL MySQL] Compatibilité des requêtes

Unable to load dynamic library '/usr/lib/php4/20020429/mysql.soVous obtenez un message du type suivant suite à une mise à jour de PHP : Unable to load dynamic library '/usr/lib/php4/20020429/gd2.so' - /usr/lib/php4/20020429/gd2.so: cannot open shared object file: No such file or directory in Unknown on line... www.commentcamarche.net/faq/sujet-2893-unable-to-load-dynamic-library-usr-lib-php4-20020429-mysql-so

Résultats pour [PHP][MSSQL MySQL] Compatibilité des requêtes

Apache2, PHP5 et MySQL4 et mises à jour (Résolu)Bonjour, Voilà, j'aimerai savoir comment on procède pour les mises à jour lorsque l'on a Apache, PHP, et MySQL installés indépendamment (donc pas d'EasyPHP, ni de WAMP... etc)? Faut-il tout réinstaller à chaque fois? Quand même pas! je... www.commentcamarche.net/forum/affich-4187476-apache2-php5-et-mysql4-et-mises-a-jour
[PHP] petit problème de requette SQL..(début) (Résolu)Bonjours à tous, tous d'abord je tien a signaler que je suis débutant... donc voilà mon problème : Voici une partie de mon codes: require( "config.php" ) ; $req = mysql_query( " SELECT * FROM exemple WHERE sondage_qorr='1' " ); while(... www.commentcamarche.net/forum/affich-1759490-php-petit-probleme-de-requette-sql-debut
Tout sur Php et MySql (Résolu)Bonjour, Je suis une passionnée de la programmation web et j'aimerais s'il vous plait que vous me conseilliez un livre qui me montrera tous ou le maximum de secrets de php et mysql MERCI BEAUCOUP DE ME REPONDRE www.commentcamarche.net/forum/affich-4746217-tout-sur-php-et-mysql