PDOException durante la creazione della tabella: tabella di base o vista non trovata [chiuso]


8

Ho Drupal in esecuzione su MariaDB 5.5.33. Quando eseguo update.php (dopo l'aggiornamento a Drupal 7.28 da Drupal 6) ricevo un errore:

Errore: PDOException: SQLSTATE [42S02]: tabella di base o vista non trovata: 1146 La tabella 'webdb.location_country' non esiste: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Chiave primaria: codice paese ISO a due lettere ', nameVARCHAR (255) NON NULL DEFAULT' 'COMMENTO' Nome paese completo ', CHIAVE PRIMARIA ( code)) MOTORE = SET DI CARATTERI DEFAULT InnoDB utf8 COMMENT' Dati paese gestiti da location.module. '; Array () indb_create_table () (riga 2720 di /home/web/public_html/includes/database/database.inc).

Quando provo ad eseguire il comando

CREATE TABLE {location_country} ( codeCHAR (2) COMMENTO NON NULL 'Chiave primaria: codice paese ISO a due lettere', nameVARCHAR (255) DEFAULT NULL '' COMMENTO 'Nome paese completo', CHIAVE PRIMARIA ( code)) MOTORE = CARATTERE PREDEFINITO InnoDB SET utf8 COMMENTO 'Dati Paese gestiti da location.module.';

in phpMyAdmin viene visualizzato un errore

# 1064 - Hai un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MariaDB per la sintassi corretta da usare vicino a '{location_country} ( codeCHAR (2) NON NULL COMMENT' 'Chiave primaria: due lettere IS' alla riga 1

Ma non sono riuscito a scoprire dov'è il problema.

Risposte:


6

Ho avuto lo stesso problema e nel mio caso il problema era il motore delle tabelle del database: per impostazione predefinita è InnoDB e (per alcuni motivi non devo ancora capire) Drupal segnala questo errore.

È necessario modificare il motore di database in MyISAM. Prima di tutto, devi essere sicuro che le tabelle che verranno create da Drupal abbiano MyISAM come motore: dentro /includes/database/mysql/schema.inc, cerca createTableSql($name, $table)e cambia InnoDB in MyISAM; quindi, salvalo.
Poiché nel database sono presenti alcune tabelle, è necessario modificarle MyISAM, quindi è sufficiente esportare il database come file .sql aprirlo in un editor di testo e sostituirlo Engine=InnoDBcon Engine=MyISAM. Ora nel server phpmyadminelimina tutte le tabelle del DB e importa il nuovo .sqlfile al suo interno. In questo modo, tutte le tabelle e le tabelle che verranno create da Drupal sono MyISAM.


In effetti, il problema era nel motore. Ho creato la tabella come MyISAM. L'ho quindi esportato, modificato in InnoDB e ho provato a reimportarlo. Non ha funzionato Quindi sono passato a MyISAM come descritto sul link. Sembra funzionare. Grazie mille.
Tilia,

3

Dal momento che le altre risposte (comprese quelle che non sono in alcun modo correlate al motore InnoDB) alle domande su questo PDOException sono contrassegnate come duplicate e reindirizzamenti a questo, suppongo che questo sia il luogo canonico per le risposte a questo problema.

L'ho riscontrato diverse volte durante la disinstallazione di un modulo e la tabella cercata non esiste sul sito (perché è stata eliminata per errore, perché nella definizione dello schema è presente un errore di battitura .installo per qualche altro motivo).

Il modo più semplice per risolverlo è eseguire update.phpmanualmente lo script di aggiornamento del database ( ).

Dopo che il tuo sito è tornato in vita, dovresti provare a capire la causa principale del problema e risolverlo.


2

È necessario rimuovere le parentesi graffe attorno al nome della tabella quando si utilizza come SQL non elaborato.

per esempio:

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.';

Interessante. Perché Drupal mostra il comando SQL con sysntax errata? Comunque, non ha funzionato. Ha funzionato in TEST DB, non in quello desiderato. Infine, la soluzione è stata passare al motore MyISAM come descritto di seguito.
Tilia,

Drupal aggiunge le parentesi graffe per rilevare i nomi delle tabelle e applicare il prefisso del database prima di eseguire la query.
sanzante,

1

Questo è lo stesso messaggio di errore che si è verificato durante lo spostamento di Drupal 7 da un sito di sviluppo a un altro sito di sviluppo sul mio laptop. Dopo aver controllato le tabelle nel database Drupal ho scoperto che il dump sql completo non veniva importato (usando Adminer e l'opzione "Dal server", adminer.sql).

Cerca le tabelle del database Drupal 7 che si avvicinano alla fine del dump SQL in ordine alfabetico come: user * , views * , webform * , workbench * , xmlsitemap * per vedere se tutto è importato.

Ho usato drush sql-cli < database.sqlper importare il dump sql nel database Drupal dopo aver lasciato tutte le tabelle del database con drush sql-drop.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.