Problèmes lors de migration de serveur

Petit nouveau ! | 1 Messages

15 juin 2011, 11:04

Bonjour,

Mon site est actuellement sur un serveur ayant PHP version 4.3.9. Je souhaite le migrer chez un autre hébergeur ayant un serveur avec PHP 5.2.17, mais je rencontre les erreurs suivantes :

Lorsque j'importe mon fichier .sql dans le phpMyAdmin du nouveau serveur, j'ai le message suivant et je ne peux pas importer la table en question :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
resume text NOT NULL,
file varchar(255) NOT NULL,
www varchar' at line 17

J'ai essayé de faire différentes recherches pour comprendre où est l'erreur, mais je n'ai rien trouvé qui pourrait m'aider.

Voici la requête SQL
DROP TABLE IF EXISTS livre;
CREATE TABLE livre (
   id int(6) NOT NULL auto_increment,
   contact varchar(255) NOT NULL,
   sonom varchar(255) NOT NULL,
   pays varchar(255) NOT NULL,
   tel varchar(255) NOT NULL,
   fax varchar(255) NOT NULL,
   email varchar(255) NOT NULL,
   titre varchar(255) NOT NULL,
   langue varchar(255) NOT NULL,
   region text NOT NULL,
   auteur varchar(255) NOT NULL,
   pub varchar(255) NOT NULL,
   year varchar(4) NOT NULL,
   type text NOT NULL,
   isbn varchar(50) NOT NULL,
   key text NOT NULL,
   resume text NOT NULL,
   file varchar(255) NOT NULL,
   www varchar(255) NOT NULL,
   date date NOT NULL default '0000-00-00',
   temp tinyint(1) NOT NULL default '1',
   PRIMARY KEY (id)
);
Pouvez-vous m'aider ? Merci d'avance.

Eléphant du PHP | 209 Messages

15 juin 2011, 11:12

Il faut des antiquotes autour de key :

KEY text NOT NULL,

=>

`KEY` text NOT NULL,

Mais bon, comme justement KEY est un mot-clé SQL, c'est une mauvaise idée d'appeler un champs comme cela.
--
Eric

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juin 2011, 11:14

salut,

regarde ton code SQL sur le forum et cela te sautera aux yeux ;)

tu utilise comme nom de colonne le clef clef KEY, donc (et c'est normal) mysql ne sait pas ce que tu lui demande.

Pour éviter cela tu peut utiliser les "back quote" ` autour des noms de colonne utilsant des mot clef.
DROP TABLE IF EXISTS livre;
CREATE TABLE livre (
   id int(6) NOT NULL AUTO_INCREMENT,
   contact varchar(255) NOT NULL,
   sonom varchar(255) NOT NULL,
   pays varchar(255) NOT NULL,
   tel varchar(255) NOT NULL,
   fax varchar(255) NOT NULL,
   email varchar(255) NOT NULL,
   titre varchar(255) NOT NULL,
   langue varchar(255) NOT NULL,
   region text NOT NULL,
   auteur varchar(255) NOT NULL,
   pub varchar(255) NOT NULL,
   `year` varchar(4) NOT NULL,
   `'type` text NOT NULL,
   isbn varchar(50) NOT NULL,
   `KEY` text NOT NULL,
   resume text NOT NULL,
   file varchar(255) NOT NULL,
   www varchar(255) NOT NULL,
   `date` date NOT NULL DEFAULT '0000-00-00',
   temp tinyint(1) NOT NULL DEFAULT '1',
   PRIMARY KEY (id)
);
correction avec les mots clefs "protégés"

en régle général c'est une idée foireuse d'utiliser ce type de nom pour les colonne.
Par exemple la date peut être changé en un nom plus explicte, tel que dateAchat, dateImpression, dateEdition etc etc

pour Key tu aurais simplement pu faire comme pour d'autre et utiliser le mot français (donc clef) si ce mot est pertinant dans la logique des utilisateurs).

D'ailleur cette clef est je pense, la référence désignant le livre dans le système de classement ? (le truc que l'on trouve en général sur le flanc ?) si oui cette clef est normalement unique et donc pourrait te servir de clef primaire ;) (bon dans ce cas c'est a atoi de la gérer mais a près tous quand tu ajoute le livre tu ajoute bien la clef ;)

Globalement avoir des noms de colonne explicte permet de mieux s'y retrouver quand on se replonge dans le code (que ce soit toi ou pas, surtout dans le second cas d'ailleurs ;)).


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

15 juin 2011, 12:50

Un immense MERCI à tous les 2 :D . J’ai mis des "back quote" et j’ai réussi à importer mon fichier .sql. Je n’ai pas encore tout testé, mais je suis déjà soulagée d’avoir pu importer ma table.

En fait le Key correspond aux mots clés. Je reconnais que ce n’était pas très intelligent d’avoir choisi ce nom, mais cela a été fait il y a quelques temps déjà…

Maintenant, lorsque j’ouvre la page du formulaire dans mon navigateur, j’ai le message suivant :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/956698452554112222/web/livres/config.inc.php on line 45

Et voici la ligne de code

Code : Tout sélectionner

function db_fetch_array($result) { return mysql_fetch_array($result); }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 juin 2011, 10:03

yop,

le message est clair, $result n'est pas une ressource mysql, donc la faut debuguer, il faut trouver la ligne qui appelle cette fonction et ensuite voir a quoi correspond le result que lui passe.

En général c'est sparce que la requete SQL est foireuse et retourne false. Dans ton cas ça peut être un problème de connexion à mysql. A tu bien changer les nom d'utilisateur, mot de passe, nom de base et nom de m'hote mysql partout où cela est nécéssaire ?

si tu peux active l'error_reporting (error_repporting(E_ALL); en 1ère des scripts) si c'est un niveau de rapport d'erreur diférent ;)


@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

16 juin 2011, 10:59

Bonjour,

Il est aussi possible que les noms de colonnes gênant lors de la création des tables soient aussi gênant lors des requêtes sql.

Tu utilises une fonction db_fetch_array($result). Peut être utilises tu également une fonction db_query().
Dans ce cas, ajoute un test sur mysql_errno() dans la fonction pour afficher la requête et le message d'erreur.