fix: for wrong primary key
Übergeordneter
cb0668df
No related branches found
No related tags found
-
Jein, mein Fix sorgt zumindest dafür, dass der Fehler
INFO - SQLSTATE[42000]: Syntax error or access violation: 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 '`ALTER TABLE ``Mainproject_de_bricksCache`` DROP PRIMARY KEY;`' at line 1`ALTER TABLE ``Mainproject_de_bricksCache`` DROP PRIMARY KEY;`
verschwindet. Er korrigiert also die fehlerhafte Syntax. In meiner Antwort oben habe ich glaube ich die falsche Fehlermeldung kopiert. Die Meldung, die danach erscheint ist folgende:
Syntax error or access violation: 1091 Can't DROP 'PRIMARY'; check that column/key existsALTER TABLE `Mainproject_de_bricksCache` DROP PRIMARY KEY;
-
Mein Ansatz einer Query/Procedure, die den PK nur dann entfernt, wenn es einen gibt funktioniert so nicht, da Tabellennamen nicht aus Parametern kommen können:
DELIMITER // DROP PROCEDURE IF EXISTS drop_primary_key_if_exists // CREATE PROCEDURE drop_primary_key_if_exists(table_name_param VARCHAR(255)) BEGIN IF EXISTS( SELECT constraint_name FROM information_schema.table_constraints WHERE table_name = table_name_param AND constraint_name = 'PRIMARY' ) THEN ALTER TABLE table_name_param DROP PRIMARY KEY; END IF; END // DELIMITER ; CALL drop_primary_key_if_exists('feeds');
Es wird also notwendig sein per PHP erst zu schauen ob die Tabelle einen PK hat. Das Ergebnis der nachfolgenden Query ist 1, wenn ein PK in der Tabelle
my_table
existiert.SELECT COUNT(constraint_name) FROM information_schema.table_constraints WHERE table_name = `my_table` AND constraint_name = 'PRIMARY'
Anschließend kann die nachfolgende Query ausgeführt werden, um den PK zu entfernen:
ALTER TABLE table_name_param DROP PRIMARY KEY;
-
mentioned in merge request !8 (merged)
Bitte registrieren oder Anmelden zum Kommentieren