[-] Installer: check create table privileges
This commit is contained in:
@@ -674,6 +674,11 @@ abstract class DbCore
|
|||||||
return call_user_func_array(array(Db::getClass(), 'hasTableWithSamePrefix'), array($server, $user, $pwd, $db, $prefix));
|
return call_user_func_array(array(Db::getClass(), 'hasTableWithSamePrefix'), array($server, $user, $pwd, $db, $prefix));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function checkCreatePrivilege($server, $user, $pwd, $db, $prefix, $engine)
|
||||||
|
{
|
||||||
|
return call_user_func_array(array(Db::getClass(), 'checkCreatePrivilege'), array($server, $user, $pwd, $db, $prefix, $engine));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated 1.5.0
|
* @deprecated 1.5.0
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -185,6 +185,25 @@ class DbMySQLiCore extends Db
|
|||||||
$link->close();
|
$link->close();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function checkCreatePrivilege($server, $user, $pwd, $db, $prefix, $engine)
|
||||||
|
{
|
||||||
|
$link = @new mysqli($server, $user, $pwd, $db);
|
||||||
|
if (mysqli_connect_error())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$sql = '
|
||||||
|
CREATE TABLE `'.$prefix.'test` (
|
||||||
|
`test` tinyint(1) unsigned NOT NULL
|
||||||
|
) ENGINE=MyISAM';
|
||||||
|
$result = $link->query($sql);
|
||||||
|
|
||||||
|
if (!$result)
|
||||||
|
return $link->error;
|
||||||
|
|
||||||
|
$link->query('DROP TABLE `'.$prefix.'test`');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see Db::checkEncoding()
|
* @see Db::checkEncoding()
|
||||||
|
|||||||
@@ -174,6 +174,28 @@ class DbPDOCore extends Db
|
|||||||
return (bool)$result->fetch();
|
return (bool)$result->fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function checkCreatePrivilege($server, $user, $pwd, $db, $prefix, $engine)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$link = DbPDO::_getPDO($server, $user, $pwd, $db, 5);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = '
|
||||||
|
CREATE TABLE `'.$prefix.'test` (
|
||||||
|
`test` tinyint(1) unsigned NOT NULL
|
||||||
|
) ENGINE=MyISAM';
|
||||||
|
$result = $link->query($sql);
|
||||||
|
if (!$result)
|
||||||
|
{
|
||||||
|
$error = $link->errorInfo();
|
||||||
|
return $error[2];
|
||||||
|
}
|
||||||
|
$link->query('DROP TABLE `'.$prefix.'test`');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see Db::checkConnection()
|
* @see Db::checkConnection()
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -174,6 +174,28 @@ class MySQLCore extends Db
|
|||||||
@mysql_close($link);
|
@mysql_close($link);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function checkCreatePrivilege($server, $user, $pwd, $db, $prefix, $engine)
|
||||||
|
{
|
||||||
|
ini_set('mysql.connect_timeout', 5);
|
||||||
|
if (!$link = @mysql_connect($server, $user, $pwd, true))
|
||||||
|
return false;
|
||||||
|
if (!@mysql_select_db($db, $link))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$sql = '
|
||||||
|
CREATE TABLE `'.$prefix.'test` (
|
||||||
|
`test` tinyint(1) unsigned NOT NULL
|
||||||
|
) ENGINE=MyISAM';
|
||||||
|
|
||||||
|
$result = mysql_query($sql, $link);
|
||||||
|
|
||||||
|
if (!$result)
|
||||||
|
return mysql_error($link);
|
||||||
|
|
||||||
|
mysql_query('DROP TABLE `'.$prefix.'test`', $link);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see Db::checkEncoding()
|
* @see Db::checkEncoding()
|
||||||
|
|||||||
@@ -71,6 +71,12 @@ class InstallModelDatabase extends InstallAbstractModel
|
|||||||
// Check if a table with same prefix already exists
|
// Check if a table with same prefix already exists
|
||||||
if (!$clear && Db::hasTableWithSamePrefix($server, $login, $password, $database, $prefix))
|
if (!$clear && Db::hasTableWithSamePrefix($server, $login, $password, $database, $prefix))
|
||||||
$errors[] = $this->language->l('At least one table with same prefix was already found, please change your prefix or drop your database');
|
$errors[] = $this->language->l('At least one table with same prefix was already found, please change your prefix or drop your database');
|
||||||
|
if (($create_error = Db::checkCreatePrivilege($server, $login, $password, $database, $prefix, $engine)) !== true)
|
||||||
|
{
|
||||||
|
$errors[] = $this->language->l(sprintf('Your database login don\'t have the privileges to create table on the database "%s". Ask your hosting provider:', $database));
|
||||||
|
if ($create_error != false)
|
||||||
|
$errors[] = $create_error;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
|||||||
Reference in New Issue
Block a user