Inserted backticks for foreign keys in MySQL
authorAlexander Ebert <ebert@woltlab.com>
Fri, 5 Aug 2011 12:43:11 +0000 (14:43 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Fri, 5 Aug 2011 12:43:11 +0000 (14:43 +0200)
Somehow MySQL does not like symbol names starting with a number, while within backticks they're allowed. As a side note, documentation does not mention this pitfall once. Like always.

wcfsetup/install/files/lib/system/database/editor/MySQLDatabaseEditor.class.php

index c9678debde7bcf4f8ff0e966ac36177ed6e72335..53fac0494fedfc8fd51366a8e626f9a2dc6a4816 100644 (file)
@@ -138,7 +138,7 @@ class MySQLDatabaseEditor extends DatabaseEditor {
                $sql = "ALTER TABLE ".$tableName." ADD";
                
                // add index name
-               if (!empty($indexName)) $sql .= " CONSTRAINT ".$indexName;
+               if (!empty($indexName)) $sql .= " CONSTRAINT `".$indexName."`";
                
                // add columns
                $sql .= " FOREIGN KEY (".str_replace(',', ',', preg_replace('/\s+/', '', $indexData['columns'])).")";
@@ -169,7 +169,7 @@ class MySQLDatabaseEditor extends DatabaseEditor {
         * @see wcf\system\database\editor\DatabaseEditor::dropForeignKey()
         */
        public function dropForeignKey($tableName, $indexName) {
-               $sql = "ALTER TABLE ".$tableName." DROP FOREIGN KEY ".$indexName;
+               $sql = "ALTER TABLE ".$tableName." DROP FOREIGN KEY `".$indexName."`";
                $statement = $this->dbObj->prepareStatement($sql);
                $statement->execute();
        }