PDOException lors de la création de la table: table ou vue de base introuvable [fermé]


8

J'ai Drupal fonctionnant sur MariaDB 5.5.33. Lorsque j'exécute update.php (après la mise à niveau vers Drupal 7.28 depuis Drupal 6), j'obtiens une erreur:

Échec: PDOException: SQLSTATE [42S02]: table de base ou vue introuvable: 1146 La table 'webdb.location_country' n'existe pas: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Clé primaire: Code ISO de pays à deux lettres ', nameVARCHAR (255) NOT NULL DEFAULT' 'COMMENT' Full Country Name ', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT' Data country managed by location.module. '; Array () indb_create_table () (ligne 2720 de /home/web/public_html/includes/database/database.inc).

Quand j'essaye d'exécuter la commande

CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Primary Key: Two letter ISO Country Code', nameVARCHAR (255) NOT NULL DEFAULT '' COMMENT 'Full Country Name', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Données de pays gérées par location.module.';

dans phpMyAdmin, je reçois une erreur

# 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de '{location_country} ( codeCHAR (2) NOT NULL COMMENT' Clé primaire: Deux lettres IS 'à la ligne 1

Mais je n'ai pas pu découvrir où est le problème.

Réponses:


6

J'ai eu le même problème, et dans mon cas, le problème était le moteur des tables de base de données: par défaut, c'est InnoDB et (pour certaines raisons, je n'ai toujours pas besoin de comprendre) Drupal rapporte cette erreur.

Vous devez remplacer le moteur de base de données par MyISAM. Tout d'abord, vous devez être sûr que les tables qui vont être créées par Drupal ont MyISAM comme moteur: dans /includes/database/mysql/schema.inc, recherchez createTableSql($name, $table)et changez InnoDB en MyISAM; puis enregistrez-le.
Étant donné que vous avez quelques tables dans votre base de données, elles doivent également être changées MyISAM, alors exportez simplement la base de données en tant que fichier .sql, ouvrez-la dans un éditeur de texte et remplacez-la Engine=InnoDBpar Engine=MyISAM. Maintenant, sur le serveur, phpmyadminsupprimez toutes les tables de la base de données et importez-y le nouveau .sqlfichier. De cette façon, toutes vos tables et les tables qui seront créées par Drupal sont MyISAM.


En effet, le problème était dans le moteur. J'ai créé la table en tant que MyISAM. Je l'ai ensuite exporté, changé do InnoDB et essayé de réimporter. Ça n'a pas marché. J'ai donc basculé vers MyISAM comme décrit sur le lien. Cela semble fonctionner. Merci beaucoup.
Tilia

3

Étant donné que d'autres réponses (y compris celles qui ne sont en aucun cas liées au moteur InnoDB) aux questions sur cette exception PDOException sont marquées comme des doublons et redirigent vers celle-ci, je suppose que c'est l'endroit canonique pour les réponses à ce problème.

Je l'ai rencontré plusieurs fois lors de la désinstallation d'un module, et la table recherchée n'existe pas sur le site (car elle a été supprimée par accident, car il y a une faute de frappe dans la définition du schéma dans .install, ou pour une autre raison).

Le moyen le plus simple de le résoudre consiste à exécuter update.phpmanuellement le script de mise à jour de la base de données ( ).

Une fois votre site ressuscité, vous devez essayer de déterminer la cause première du problème et de le résoudre.


2

Vous devrez supprimer les accolades autour du nom de la table lors de l'utilisation en tant que SQL brut.

par exemple:

CREATE TABLE location_country ( `code` CHAR(2) NOT NULL COMMENT 'Primary Key: Two letter ISO Country Code', `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Full Country Name ', PRIMARY KEY (`code`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Country data managed by location.module.';

Intéressant. Pourquoi Drupal affiche-t-il la commande SQL avec une mauvaise sysntax? Quoi qu'il en soit, cela n'a pas fonctionné. Cela a fonctionné dans TEST DB, pas dans celui souhaité. Enfin, la solution a été de passer au moteur MyISAM comme décrit ci-dessous.
Tilia

Drupal ajoute les accolades pour détecter les noms de table et appliquer le préfixe de base de données avant d'exécuter la requête.
sanzante

1

Il s'agit du même message d'erreur lors de la migration de Drupal 7 d'un site de développement vers un autre site de développement sur mon ordinateur portable. Après avoir vérifié les tables dans la base de données Drupal, j'ai constaté que le vidage sql complet n'était pas importé (en utilisant Adminer et l'option "From server", adminer.sql).

Recherchez par ordre alphabétique les tables de base de données Drupal 7 proches de la fin du vidage SQL: utilisateur * , vues * , formulaire Web * , plan de travail * , xmlsitemap * pour voir si tout a été importé.

J'avais l'habitude drush sql-cli < database.sqld'importer le vidage sql dans la base de données Drupal après avoir supprimé toutes les tables de base de données avec drush sql-drop.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.