/** * Tests for DBI::getColumnMapFromSql() method. * * @return void * @test */ public function testPMAGetColumnMap() { $extension = $this->getMockBuilder('PMA\\libraries\\dbi\\DBIDummy')->disableOriginalConstructor()->getMock(); $extension->expects($this->any())->method('realQuery')->will($this->returnValue(true)); $meta1 = new FieldMeta(); $meta1->table = "meta1_table"; $meta1->name = "meta1_name"; $meta2 = new FieldMeta(); $meta2->table = "meta2_table"; $meta2->name = "meta2_name"; $extension->expects($this->any())->method('getFieldsMeta')->will($this->returnValue(array($meta1, $meta2))); $dbi = new PMA\libraries\DatabaseInterface($extension); $sql_query = "PMA_sql_query"; $view_columns = array("view_columns1", "view_columns2"); $column_map = $dbi->getColumnMapFromSql($sql_query, $view_columns); $this->assertEquals(array('table_name' => 'meta1_table', 'refering_column' => 'meta1_name', 'real_column' => 'view_columns1'), $column_map[0]); $this->assertEquals(array('table_name' => 'meta2_table', 'refering_column' => 'meta2_name', 'real_column' => 'view_columns2'), $column_map[1]); }
/** * Handle compatibility options * * @param PMA\libraries\DatabaseInterface $dbi Database interface * @param array $request Request array * * @return void */ private function _setSQLMode($dbi, $request) { $sql_modes = array(); if (isset($request['sql_compatibility']) && 'NONE' != $request['sql_compatibility']) { $sql_modes[] = $request['sql_compatibility']; } if (isset($request['sql_no_auto_value_on_zero'])) { $sql_modes[] = 'NO_AUTO_VALUE_ON_ZERO'; } if (count($sql_modes) > 0) { $dbi->tryQuery('SET SQL_MODE="' . implode(',', $sql_modes) . '"'); } }
exit; } if (defined('TESTSUITE')) { /** * For testsuite we use dummy driver which can fake some queries. */ include_once './libraries/dbi/DBIDummy.php'; $extension = new DBIDummy(); } else { /** * First check for the mysqli extension, as it's the one recommended * for the MySQL server's version that we support * (if PHP 7+, it's the only one supported) */ $extension = 'mysqli'; if (!DatabaseInterface::checkDbExtension($extension)) { $docurl = PMA\libraries\Util::getDocuLink('faq', 'faqmysql'); $doclink = sprintf(__('See %sour documentation%s for more information.'), '[a@' . $docurl . '@documentation]', '[/a]'); if (PMA_PHP_INT_VERSION < 70000) { $extension = 'mysql'; if (!PMA\libraries\DatabaseInterface::checkDbExtension($extension)) { // warn about both extensions missing and exit PMA_warnMissingExtension('mysqli|mysql', true, $doclink); } elseif (empty($_SESSION['mysqlwarning'])) { trigger_error(__('You are using the mysql extension which is deprecated in ' . 'phpMyAdmin. Please consider installing the mysqli ' . 'extension.') . ' ' . $doclink, E_USER_WARNING); // tell the user just once per session $_SESSION['mysqlwarning'] = true; } } else { // mysql extension is not part of PHP 7+, so warn and exit PMA_warnMissingExtension('mysqli', true, $doclink);
/** * Test database connection * * @param string $connect_type 'tcp' or 'socket' * @param string $host host name * @param string $port tcp port to use * @param string $socket socket to use * @param string $user username to use * @param string $pass password to use * @param string $error_key key to use in return array * * @return bool|array */ public static function testDBConnection($connect_type, $host, $port, $socket, $user, $pass = null, $error_key = 'Server') { // static::testPHPErrorMsg(); $error = null; $host = PMA_sanitizeMySQLHost($host); if (DatabaseInterface::checkDbExtension('mysqli')) { $socket = empty($socket) || $connect_type == 'tcp' ? null : $socket; $port = empty($port) || $connect_type == 'socket' ? null : $port; $extension = 'mysqli'; } else { $socket = empty($socket) || $connect_type == 'tcp' ? null : ':' . ($socket[0] == '/' ? '' : '/') . $socket; $port = empty($port) || $connect_type == 'socket' ? null : ':' . $port; $extension = 'mysql'; } if ($extension == 'mysql') { $conn = @mysql_connect($host . $port . $socket, $user, $pass); if (!$conn) { $error = __('Could not connect to the database server!'); } else { mysql_close($conn); } } else { $conn = @mysqli_connect($host, $user, $pass, null, $port, $socket); if (!$conn) { $error = __('Could not connect to the database server!'); } else { mysqli_close($conn); } } // static::testPHPErrorMsg(false); if (isset($php_errormsg)) { $error .= " - {$php_errormsg}"; } return is_null($error) ? true : array($error_key => $error); }
/** * Returs list of used PHP extensions. * * @return array of strings */ public static function listPHPExtensions() { $result = array(); if (DatabaseInterface::checkDbExtension('mysqli')) { $result[] = 'mysqli'; } else { $result[] = 'mysql'; } if (extension_loaded('curl')) { $result[] = 'curl'; } if (extension_loaded('mbstring')) { $result[] = 'mbstring'; } return $result; }
/** * Returns the real row count for a table * * @return number */ function getRealRowCountTable() { // SQL query to get row count for a table. $result = $this->_dbi->fetchSingleRow(sprintf('SELECT COUNT(*) AS %s FROM %s.%s', Util::backquote('row_count'), Util::backquote($this->_db_name), Util::backquote($this->_name))); return $result['row_count']; }