diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php index ae3aae6c142..663b74902a4 100644 --- a/htdocs/install/upgrade.php +++ b/htdocs/install/upgrade.php @@ -149,29 +149,33 @@ if (! isset($_GET["action"]) || $_GET["action"] == "upgrade") 'llx_telephonie_societe_ligne', 'llx_telephonie_tarif_client'); foreach ($listtables as $val) - { - $sql = "SHOW CREATE TABLE ".$val; - $resql = $db->query($sql); - if (! $resql) dolibarr_print_error($db); - { - $values=$db->fetch_array($resql); - $i=0; - $createsql=$values[1]; - while (eregi('CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`',$createsql,$reg) && $i < 100) - { - $sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1]; - $resqldrop = $db->query($sqldrop); - if ($resqldrop) - { - print ''.$sqldrop.";\n"; - } - $createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql); - $i++; - } - $db->free($resql); - } - - } + { + $searchTable = ''; + $searchTable = $db->DDLListTables($conf->db->name,$val); + if ($searchTable == $val) + { + $sql = "SHOW CREATE TABLE ".$val; + $resql = $db->query($sql); + if (! $resql) dolibarr_print_error($db); + { + $values=$db->fetch_array($resql); + $i=0; + $createsql=$values[1]; + while (eregi('CONSTRAINT `(0_[0-9a-zA-Z]+|[_0-9a-zA-Z]+_ibfk_[0-9]+)`',$createsql,$reg) && $i < 100) + { + $sqldrop="ALTER TABLE ".$val." DROP FOREIGN KEY ".$reg[1]; + $resqldrop = $db->query($sqldrop); + if ($resqldrop) + { + print ''.$sqldrop.";\n"; + } + $createsql=eregi_replace('CONSTRAINT `'.$reg[1].'`','XXX',$createsql); + $i++; + } + $db->free($resql); + } + } + } } } diff --git a/htdocs/lib/databases/mysql.lib.php b/htdocs/lib/databases/mysql.lib.php index 0bb300db0d9..474ed80bc60 100644 --- a/htdocs/lib/databases/mysql.lib.php +++ b/htdocs/lib/databases/mysql.lib.php @@ -672,15 +672,22 @@ class DoliDb } /** - \brief Liste des tables dans une database. - \param database Nom de la database - \return resource - */ - function DDLListTables($database) - { - $this->results = mysql_list_tables($database, $this->db); - return $this->results; - } + \brief Liste des tables dans une database. + \param database Nom de la database + \param table Nom de la table à rechercher + \return resource + */ + function DDLListTables($database, $table='') + { + $like = ''; + if ($table) $like = "LIKE '".$table."'" + $result = mysqli_query($this->db, "SHOW TABLES FROM ".$database." ".$like." "); + while($row = mysqli_fetch_array($result)) + { + $this->results = $row[0]; + } + return $this->results; + } /** \brief Crée une table diff --git a/htdocs/lib/databases/mysqli.lib.php b/htdocs/lib/databases/mysqli.lib.php index cbd583ead56..0659352bddb 100644 --- a/htdocs/lib/databases/mysqli.lib.php +++ b/htdocs/lib/databases/mysqli.lib.php @@ -678,12 +678,19 @@ class DoliDb /** \brief Liste des tables dans une database. \param database Nom de la database + \param table Nom de la table à rechercher \return resource */ - function DDLListTables($database) + function DDLListTables($database, $table='') { - $this->results = mysqli_list_tables($database, $this->db); - return $this->results; + $like = ''; + if ($table) $like = "LIKE '".$table."'"; + $result = mysqli_query($this->db, "SHOW TABLES FROM ".$database." ".$like." "); + while($row = mysqli_fetch_array($result)) + { + $this->results = $row[0]; + } + return $this->results; } /**