}
// check connection data
- $db = new $dbClass($dbHost, $dbUser, $dbPassword, $dbName, $dbPort);
+ $db = new $dbClass($dbHost, $dbUser, $dbPassword, $dbName, $dbPort, true);
$db->connect();
$start = microtime(true);
// check sql version
if (!empty($availableDBClasses[$dbClass]['minversion'])) {
- $sqlVersion = $db->getVersion();
- if ($sqlVersion != 'unknown') {
- $compareSQLVersion = preg_replace('/^(\d+\.\d+\.\d+).*$/', '\\1', $sqlVersion);
- if (!(version_compare($compareSQLVersion, $availableDBClasses[$dbClass]['minversion']) >= 0)) {
- throw new SystemException("Insufficient SQL version '".$compareSQLVersion."'. Version '".$availableDBClasses[$dbClass]['minversion']."' or greater is needed.");
- }
+ $compareSQLVersion = preg_replace('/^(\d+\.\d+\.\d+).*$/', '\\1', $db->getVersion());
+ if (!(version_compare($compareSQLVersion, $availableDBClasses[$dbClass]['minversion']) >= 0)) {
+ throw new SystemException("Insufficient SQL version '".$compareSQLVersion."'. Version '".$availableDBClasses[$dbClass]['minversion']."' or greater is needed.");
+ }
+ }
+ // check innodb support
+ if ($dbClass == 'MySQLDatabase') {
+ $sql = "SHOW VARIABLES WHERE Variable_name = 'have_innodb'";
+ $statement = $db->prepareStatement($sql);
+ $statement->execute();
+ $row = $statement->fetchArray();
+ if ($row !== false || $row['Value'] != 'YES') {
+ throw new SystemException("Support for InnoDB is missing.");
}
}
*/
protected $database = '';
+ /**
+ * enables failsafe connection
+ * @var boolean
+ */
+ protected $failsafeTest = false;
+
/**
* number of executed queries
* @var integer
* @param string $database SQL database server database name
* @param integer $port SQL database server port
*/
- public function __construct($host, $user, $password, $database, $port) {
+ public function __construct($host, $user, $password, $database, $port, $failsafeTest = false) {
$this->host = $host;
$this->port = $port;
$this->user = $user;
$this->password = $password;
$this->database = $database;
+ $this->failsafeTest = $failsafeTest;
// connect database
$this->connect();
if (!$this->port) $this->port = 3306; // mysql default port
try {
- $this->pdo = new \PDO('mysql:host='.$this->host.';port='.$this->port.';dbname='.$this->database, $this->user, $this->password, array(
- \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8', SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY,STRICT_ALL_TABLES'"
- ));
+ $driverOptions = array(
+ \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"
+ );
+ if (!$this->failsafeTest) {
+ $driverOptions = array(
+ \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8', SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY,STRICT_ALL_TABLES'"
+ );
+ }
+
+ $this->pdo = new \PDO('mysql:host='.$this->host.';port='.$this->port.';dbname='.$this->database, $this->user, $this->password, $driverOptions);
$this->setAttributes();
}
catch (\PDOException $e) {