phpMyAdmin can manage a whole MySQL server (needs a super-user) as well as a single database. To accomplish the latter you'll need a properly set up MySQL user who can read/write only the desired database. It's up to you to look up the appropriate part in the MySQL manual.
Many people have difficulty understanding the concept of user management with regards to phpMyAdmin. When a user logs in to phpMyAdmin, that username and password are passed directly to MySQL. phpMyAdmin does no account management on its own (other than allowing one to manipulate the MySQL user account information); all users must be valid MySQL users.
1) phpMyAdmin can compress (Zip, GZip -RFC 1952- or Bzip2 formats) dumps and CSV exports if you use PHP with Zlib support (--with-zlib) and/or Bzip2 support (--with-bz2). Proper support may also need changes in php.ini.
phpMyAdmin does not apply any special security methods to the MySQL database server. It is still the system administrator's job to grant permissions on the MySQL databases properly. phpMyAdmin's "Privileges" page can be used for this.
Warning for Mac users:
if you are on a Mac
OS version before
OS X, StuffIt unstuffs with
Mac formats.
So you'll have to resave as in BBEdit to Unix style ALL phpMyAdmin scripts
before uploading them to your server, as PHP seems not to like
Mac-style end of lines character
("\r").
<?php $cfg['blowfish_secret'] = 'ba17c1ec07d65003'; // use here a value of your choice $i=0; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; ?>Or, if you prefer to not be prompted every time you log in:
<?php $i=0; $i++; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'cbb74bc'; // use here your password $cfg['Servers'][$i]['auth_type'] = 'config'; ?>For a full explanation of possible configuration values, see the Configuration Section of this document.
cd phpMyAdmin mkdir config # create directory for saving chmod o+rw config # give it world writable permissionsAnd to edit an existing configuration, copy it over first:
cp config.inc.php config/ # copy current configuration for editing chmod o+w config/config.inc.php # give it world writable permissionsOn other platforms, simply create the folder and ensure that your web server has read and write access to it. FAQ 1.26 can help with this.
mv config/config.inc.php . # move file to current directory chmod o-rw config.inc.php # remove world read and write permissions rm -rf config # remove not needed directoryNow the file is ready to be used. You can choose to review or edit the file with your favorite editor, if you prefer to set some advanced options which the setup script does not provide.
robots.txt
file in root of
your webserver or limit access by web server configuration. You can
find example .htaccess
file which can help you achieve
this in contrib
directory in phpMyAdmin.
For a whole set of new features (bookmarks, comments, SQL-history, tracking mechanism, PDF-generation, field contents transformation, etc.) you need to create a set of special tables. Those tables can be located in your own database, or in a central database for a multi-user installation (this database would then be accessed by the controluser, so no other user should have rights to it).
Please look at your ./scripts/ directory, where you should find a file called create_tables.sql. (If you are using a Windows server, pay special attention to FAQ 1.23).
If you already had this infrastructure and upgraded to MySQL 4.1.2 or newer, please use ./scripts/upgrade_tables_mysql_4_1_2+.sql.
You can use your phpMyAdmin to create the tables for you. Please be aware that you may need special (administrator) privileges to create the database and tables, and that the script may need some tuning, depending on the database name.
After having imported the ./scripts/create_tables.sql file, you should specify the table names in your ./config.inc.php file. The directives used for that can be found in the Configuration section. You will also need to have a controluser with the proper rights to those tables (see section Using authentication modes below).
Simply copy ./config.inc.php from your previous installation into the newly unpacked one. Configuration files from old versions may require some tweaking as some options have been changed or removed; in particular, the definition of $cfg['AttributeTypes'] has changed so you better remove it from your file and just use the default one. For compatibility with PHP 6, remove a set_magic_quotes_runtime(0); statement that you might find near the end of your configuration file.
You should not copy libraries/config.default.php over config.inc.php because the default configuration file is version-specific.
If you have upgraded your MySQL server from a version previous to 4.1.2 to version 5.x or newer and if you use the pmadb/linked table infrastructure, you should run the SQL script found in scripts/upgrade_tables_mysql_4_1_2+.sql.
GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass'; GRANT SELECT ( Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv ) ON mysql.user TO 'pma'@'localhost'; GRANT SELECT ON mysql.db TO 'pma'@'localhost'; GRANT SELECT ON mysql.host TO 'pma'@'localhost'; GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO 'pma'@'localhost';If you want to use the many new relation and bookmark features:
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';(this of course requires that your linked-tables infrastructure be set up).
GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password';What the user may now do is controlled entirely by the MySQL user management system.
The Swekey is a low cost authentication USB key that can be used in
web applications.
When Swekey authentication is activated, phpMyAdmin requires the
users's Swekey to be plugged before entering the login page (currently
supported for cookie authentication mode only). Swekey Authentication is
disabled by default.
To enable it, add the following line to config.inc.php:
$cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey.conf';
You then have to create the swekey.conf file that will associate
each user with their Swekey Id. It is important to place this file outside
of your web server's document root (in the example, it is located in /etc). A self documented sample file is provided
in the contrib directory. Feel free to use it with your own
users' information.
If you want to purchase a Swekey please visit
http://phpmyadmin.net/auth_key
since this link provides funding for phpMyAdmin.
Warning for Mac users: PHP does not seem to like Mac end of lines character ("\r"). So ensure you choose the option that allows to use the *nix end of line character ("\n") in your text editor before saving a script you have modified.
Configuration note: Almost all configurable data is placed in config.inc.php. If this file does not exist, please refer to the Quick install section to create one. This file only needs to contain the parameters you want to change from their corresponding default value in libraries/config.default.php.
The parameters which relate to design (like colors) are placed in themes/themename/layout.inc.php. You might also want to create config.footer.inc.php and config.header.inc.php files to add your site specific code to be included on start and end of each page.
scripts/signon.php
. You need to
configure session name and signon
URL to use this authentication method.$cfg['Servers'][$i]['hide_db'] = '^a';and to hide both "db1" and "db2" use
$cfg['Servers'][$i]['hide_db'] = '^(db1|db2)$';More information on regular expressions can be found in the PCRE pattern syntax portion of the PHP reference manual.
ALTER TABLE `pma_column_comments` ADD `mimetype` VARCHAR( 255 ) NOT NULL, ADD `transformation` VARCHAR( 255 ) NOT NULL, ADD `transformation_options` VARCHAR( 255 ) NOT NULL;and remember that the Variable in config.inc.php has been renamed from
CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE, CREATE INDEX,DROP INDEX, INSERT,UPDATE,DELETE,TRUNCATE,REPLACE, CREATE VIEW,ALTER VIEW,DROP VIEW, CREATE DATABASE,ALTER DATABASE,DROP DATABASE
<'allow' | 'deny'> <username> [from] <ipmask>If you wish to match all users, it is possible to use a '%' as a wildcard in the username field.
'all' -> 0.0.0.0/0 'localhost' -> 127.0.0.1/8 'localnetA' -> SERVER_ADDRESS/8 'localnetB' -> SERVER_ADDRESS/16 'localnetC' -> SERVER_ADDRESS/24Having an empty rule list is equivalent to either using 'allow % from all' if your rule order is set to 'deny,allow' or 'deny % from all' if your rule order is set to 'allow,deny' or 'explicit'.
session.gc_maxlifetime
not lower than the value of $cfg['LoginCookieValidity'].disable_functions = phpinfo()Also note that enabling the "Change password " link has no effect with "config" authentication mode: because of the hard coded password value in the configuration file, end users can't be allowed to change their passwords.
'^(cs|en)'
.//TRANSLIT
is
used, so that invalid characters will be transliterated.$cfg['TrustedProxies'] = array('1.2.3.4' => 'HTTP_X_FORWARDED_FOR');The $cfg['Servers'][$i]['AllowDeny']['rules'] directive uses the client's IP address as usual.
1000
.
chown www-data:www-data tmp chmod 700 tmpIf you cannot change owner of the directory, you can achieve a similar setup using ACL:
chmod 700 tmp setfacl -m "g:www-data:rwx" tmp setfacl -d -m "g:www-data:rwx" tmpIf neither of above works for you, you can still make the directory
chmod 777
, but it might impose risk of other users on
system reading and writing data in this directory.
SELECT COUNT
.
If the approximate row count as returned by
SHOW TABLE STATUS
is smaller than this value,
SELECT COUNT
will be used, otherwise the approximate
count will be used.
SELECT COUNT ... LIMIT
. The default value of 0 bypasses
any row counting.
@HTTP_HOST@
@SERVER@
@VERBOSE@
@VSERVER@
@DATABASE@
@TABLE@
@PHPMYADMIN@
first_timestamp
, which is used for first timestamp column
in table.LIKE
by default instead of
LIKE %...%
, to avoid unintended performance problems
in case of huge tables.To enable transformations, you have to setup the column_info table and the proper directives. Please see the Configuration section on how to do so.
You can apply different transformations to the contents of each field. The transformation will take the content of each field and transform it with certain rules defined in the selected transformation.
Say you have a field 'filename' which contains a filename. Normally you would see in phpMyAdmin only this filename. Using transformations you can transform that filename into a HTML link, so you can click inside of the phpMyAdmin structure on the field's link and will see the file displayed in a new browser window. Using transformation options you can also specify strings to append/prepend to a string or the format you want the output stored in.
For a general overview of all available transformations and their options, you can consult your <www.your-host.com>/<your-install-dir>/transformation_overview.php installation.
For a tutorial on how to effectively use transformations, see our Link section on the official phpMyAdmin homepage.
Go to your tbl_structure.php page (i.e. reached through clicking on the 'Structure' link for a table). There click on "Change" (or change icon) and there you will see three new fields at the end of the line. They are called 'MIME-type', 'Browser transformation' and 'Transformation options'.
All mimetypes and their transformations are defined through single files in the directory 'libraries/transformations/'.
They are stored in files to ease up customization and easy adding of new transformations.
Because the user cannot enter own mimetypes, it is kept sure that transformations always work. It makes no sense to apply a transformation to a mimetype, the transform-function doesn't know to handle.
One can, however, use empty mime-types and global transformations which should work for many mimetypes. You can also use transforms on a different mimetype they where built for, but pay attention to option usage as well as what the transformation does to your field.
There is a basic file called 'global.inc.php'. This function can be included by any other transform function and provides some basic functions.
There are 5 possible file names:
So generally use '_' to split up mimetype and subtype, and '__' to provide a transform function.
All filenames containing no '__' in themselves are not shown as valid transform functions in the dropdown.
Please see the libraries/transformations/TEMPLATE file for adding your own transform function. See the libraries/transformations/TEMPLATE_MIMETYPE for adding a mimetype without a transform function. Also note the introduction of a function description in the language files. For each function a $strTransformation_[filename without .inc.php] has to exist.
You can use the template generator to generate new functions and entries in the language file.
To create a new transform function please see libraries/transformations/template_generator.sh. To create a new, empty mimetype please see libraries/transformations/template_generator_mimetype.sh.
A transform function always gets passed three variables:
Please have a look at our Link section on the official phpMyAdmin homepage for in-depth coverage of phpMyAdmin's features and or interface.
Try to set the $cfg['OBGzip']
directive to FALSE in your config.inc.php file and the
zlib.output_compression directive to Off in your php
configuration file.
You should first try the latest versions of Apache (and possibly MySQL).
See also the
FAQ 1.1
entry about PHP bugs with output buffering.
If your server keeps crashing, please ask for help in the various Apache
support groups.
You just forgot to read the install.txt file from the php distribution. Have a look at the last message in this bug report from the official PHP bug database.
This is a known problem with the PHP ISAPI filter: it's not so stable. Please use instead the cookie authentication mode.
This seems to be a PWS bug. Filippo Simoncini found a workaround (at this time there is no better fix): remove or comment the DOCTYPE declarations (2 lines) from the scripts libraries/header.inc.php, libraries/header_printview.inc.php, index.php, navigation.php and libraries/common.lib.php.
These features are based on the gzencode() and bzcompress()
PHP functions to be more independent of the platform (Unix/Windows, Safe Mode
or not, and so on). So, you must have Zlib/Bzip2
support (--with-zlib and --with-bz2).
Your uploaded file is saved by PHP in the "upload dir", as
defined in php.ini by the variable upload_tmp_dir (usually
the system default is /tmp).
We recommend the following setup for Apache servers running in safe mode,
to enable uploads of files while being reasonably secure:
It's not really phpMyAdmin related but RedHat 7.0. You have a RedHat 7.0
and you updated your PHP RPM to php-4.0.4pl1-3.i386.rpm, didn't you?
So the problem is that this package has a serious bug that was corrected
ages ago in PHP (2001-01-28: see
PHP's bug tracking system
for more details). The problem is that the bugged package is still
available though it was corrected (see
RedHat's BugZilla
for more details).
So please download
the fixed package (4.0.4pl1-9)
and the problem should go away.
And that fixes the \r\n problem with file uploads!
As suggested by "Rob M" in the phpWizard forum, add this line to your httpd.conf:
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
It seems to clear up many problems between Internet Explorer and SSL.
Since version 2.2.4, phpMyAdmin supports servers with open_basedir restrictions. However you need to create temporary directory and configure it as $cfg['TempDir']. The uploaded files will be moved there, and after execution of your SQL commands, removed.
The MySQL manual explains how to reset the permissions.
If PHP does not have read/write access to its upload_tmp_dir, it cannot access the uploaded query.
Check the post_max_size directive from your PHP configuration file and try to increase it.
In previous MySQL versions, the User and Password fields were named user and password. Please modify your field names to align with current standards.
Starting with version 2.7.0, the import engine has been re–written and these problems should not occur. If possible, upgrade your phpMyAdmin to the latest version to take advantage of the new import features.
The first things to check (or ask your host provider to check) are the
values of upload_max_filesize, memory_limit and
post_max_size in the php.ini configuration file.
All of these three settings limit the maximum size of data that can be
submitted and handled by PHP. One user also said that post_max_size
and memory_limit need to be larger than upload_max_filesize.
There exist several workarounds if your upload is too big or your
hosting provider is unwilling to change the settings:
Since phpMyAdmin 3.0.x, only MySQL 5.0.1 and newer are supported. For
older MySQL versions, you need to use 2.8.x branch. phpMyAdmin can
connect to your MySQL server using PHP's classic
MySQL extension as well as the
improved MySQL extension (MySQLi) that
is available in php 5.0. The latter one should be used unless you have
good reason not to do so.
When compiling php, we strongly recommend that you manually link the MySQL
extension of your choice to a MySQL client library of at least the same
minor version since the one that is bundled with some PHP distributions is
rather old and might cause problems
(see FAQ 1.17a).
If your webserver is running on a windows system, you might want to try
MySQL's
Connector/PHP
instead of the MySQL / MySQLi extensions that are bundled with the official
php Win32 builds.
You tried to access MySQL with an old MySQL client library. The version of
your MySQL client library can be checked in your phpinfo() output.
In general, it should have at least the same minor version as your server
- as mentioned in
FAQ 1.17.
This problem is generally caused by using MySQL version 4.1 or newer. MySQL
changed the authentication hash and your PHP is trying to use the old method.
The proper solution is to use the mysqli extension
with the proper client library to match your MySQL installation. Your
chosen extension is specified in $cfg['Servers'][$i]['extension'].
More information (and several workarounds) are located in the
MySQL Documentation.
The "FPDF" library we're using for this feature requires some
special files to use font faces.
Please refers to the FPDF manual to build
these files.
To connect to a MySQL server, PHP needs a set of MySQL functions called
"MySQL extension". This extension may be part of the PHP
distribution (compiled-in), otherwise it needs to be loaded dynamically. Its
name is probably mysql.so or php_mysql.dll. phpMyAdmin tried
to load the extension but failed.
Usually, the problem is solved by installing a software package called
"PHP-MySQL" or something similar.
In php.ini, set mysql.max_links higher than 1.
This is most likely because in php.ini, your file_uploads parameter is not set to "on".
This happens because the MySQL directive lower_case_table_names
defaults to 1 (ON) in the Win32 version of MySQL. You can change
this behavior by simply changing the directive to 0 (OFF):
Just edit your my.ini file that should be located in your Windows
directory and add the following line to the group [mysqld]:
set-variable = lower_case_table_names=0
Next, save the file and restart the MySQL service. You can always check the value of this directive using the query
SHOW VARIABLES LIKE 'lower_case_table_names';
A tip from Jose Fandos: put a comment on the following two lines in httpd.conf, like this:
# mod_gzip_item_include file \.php$ # mod_gzip_item_include mime "application/x-httpd-php.*"
as this version of mod_gzip on Apache (Windows) has problems handling PHP scripts. Of course you have to restart Apache.
This is a permission problem. Right-click on the phpmyadmin folder and choose properties. Under the tab Security, click on "Add" and select the user "IUSR_machine" from the list. Now set his permissions and it should work.
This is a PHP bug that occur when GZIP output buffering is enabled. If you turn off it (by $cfg['OBGzip'] = false in config.inc.php), it should work. This bug will be fixed in PHP 5.0.0.
This can happen due to a MySQL bug when having database / table names with upper case characters although lower_case_table_names is set to 1. To fix this, turn off this directive, convert all database and table names to lower case and turn it on again. Alternatively, there's a bug-fix available starting with MySQL 3.23.56 / 4.0.11-gamma.
It is possible to configure Apache in such a way that PHP has problems interpreting .php files.
The problems occur when two different (and conflicting) set of directives are used:
SetOutputFilter PHP SetInputFilter PHP
and
AddType application/x-httpd-php .php
In the case we saw, one set of directives was in
/etc/httpd/conf/httpd.conf, while
the other set was in /etc/httpd/conf/addon-modules/php.conf.
The recommended way is with AddType, so just comment out
the first set of lines and restart Apache:
#SetOutputFilter PHP #SetInputFilter PHP
This problem is known to happen when the server is running Turck MMCache but upgrading MMCache to version 2.3.21 solves the problem.
Yes.
However, phpMyAdmin needs to be backwards compatible to php4. This is why
phpMyAdmin disables the E_STRICT error_level in
error_reporting settings.
Yes. This procedure was tested with phpMyAdmin 2.6.1, PHP 4.3.9 in ISAPI mode under IIS 5.1.
Yes. This problem affects phpMyAdmin ("Call to undefined function pma_reloadnavigation"), so upgrade your PHP to the next version.
Yes. Out of the box, you can use URLs like
http://server/phpMyAdmin/index.php?server=X&db=database&table=table&target=script. For server you use the server number which refers to
the order of the server paragraph in config.inc.php.
Table and script parts are optional. If you want
http://server/phpMyAdmin/database[/table][/script] URLs, you need to do
some configuration. Following lines apply only for Apache web server. First make sure,
that you have enabled some features within global configuration. You need
Options FollowSymLinks
and AllowOverride
FileInfo
enabled for directory where phpMyAdmin is installed and
you need mod_rewrite to be enabled. Then you just need to create following
.htaccess
file in root folder of phpMyAdmin installation
(don't forget to change directory name inside of it):
RewriteEngine On RewriteBase /path_to_phpMyAdmin RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&table=$2&target=$3 [R] RewriteRule ^([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&target=$2 [R] RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?db=$1&table=$2 [R] RewriteRule ^([a-zA-Z0-9_]+)$ index.php?db=$1 [R]
Yes. However you need to pass authentication variable to CGI using following rewrite rule:
RewriteEngine On RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
There can be many explanations to this and a look at your server's error log file might give a clue.
If your cluster consist of different architectures, PHP code used for encryption/decryption won't work correct. This is caused by use of pack/unpack functions in code. Only solution is to use mcrypt extension which works fine in this case.
Yes but the default configuration values of Suhosin are known to cause problems with some operations, for example editing a table with many columns and no primary key or with textual primary key.
Suhosin configuration might lead to malfunction in some cases and it can
not be fully avoided as phpMyAdmin is kind of application which needs to
transfer big amounts of fields in single HTTP request, what is something
what Suhosin tries to prevent. Generally all
suhosin.request.*
, suhosin.post.*
and
suhosin.get.*
directives can have negative effect on
phpMyAdmin usability. You can always find in your error logs which limit
did cause dropping of variable, so you can diagnose the problem and adjust
matching configuration variable.
The default values for most Suhosin configuration options will work in most scenarios, however you might want to adjust at least following parameters:
You can also disable the warning using the SuhosinDisableWarning directive.
Be sure that you have enabled SSLOptions and StdEnvVars in your Apache configuration. See http://httpd.apache.org/docs/2.0/mod/mod_ssl.html#ssloptions.
To be able to use cookie auth Apache must know that it has to rewrite the set-cookie headers.
Example from the Apache 2.2 documentation:
ProxyPass /mirror/foo/ http://backend.example.com/ ProxyPassReverse /mirror/foo/ http://backend.example.com/ ProxyPassReverseCookieDomain backend.example.com public.example.com ProxyPassReverseCookiePath / /mirror/foo/
Note: if the backend url looks like http://host/~user/phpmyadmin, the tilde (~) must be url encoded as %7E in the ProxyPassReverse* lines. This is not specific to phpmyadmin, it's just the behavior of Apache.
ProxyPass /mirror/foo/ http://backend.example.com/~user/phpmyadmin ProxyPassReverse /mirror/foo/ http://backend.example.com/%7Euser/phpmyadmin ProxyPassReverseCookiePath /%7Euser/phpmyadmin /mirror/foo
See http://httpd.apache.org/docs/2.2/mod/mod_proxy.html for more details.
The MySQL server's privilege tables are not up to date, you need to run the mysql_upgrade command on the server.
Edit your config.inc.php file and ensure there is nothing (I.E. no blank lines, no spaces, no characters...) neither before the <?php tag at the beginning, neither after the ?> tag at the end. We also got a report from a user under IIS, that used a zipped distribution kit: the file libraries/Config.class.php contained an end-of-line character (hex 0A) at the end; removing this character cleared his errors.
Either there is an error with your PHP setup or your username/password is wrong. Try to make a small script which uses mysql_connect and see if it works. If it doesn't, it may be you haven't even compiled MySQL support into PHP.
For RedHat users, Harald Legner suggests this on the mailing list:
On my RedHat-Box the socket of MySQL is /var/lib/mysql/mysql.sock. In your php.ini you will find a line
mysql.default_socket = /tmp/mysql.sock
change it to
mysql.default_socket = /var/lib/mysql/mysql.sock
Then restart apache and it will work.
Here is a fix suggested by Brad Ummer:
Have also a look at the corresponding section of the MySQL documentation.
Try to set the $cfg['OBGZip']
directive to FALSE in the phpMyAdmin configuration file. It helps
sometime.
Also have a look at your PHP version number: if it contains "4.0b..."
it means you're running a beta version of PHP. That's not a so good idea,
please upgrade to a plain revision.
Check the value you set for the $cfg['PmaAbsoluteUri'] directive in the phpMyAdmin configuration file.
When you are using a port on your localhost, which you redirect via
port-forwarding to another host, MySQL is not resolving the localhost
as expected.
Erik Wasser explains: The solution is: if your host is "localhost"
MySQL (the commandline tool 'mysql' as well) always tries to use the socket
connection for speeding up things. And that doesn't work in this configuration
with port forwarding.
If you enter "127.0.0.1" as hostname, everything is right and MySQL uses the
TCP connection.
Themes are configured with
$cfg['ThemePath'],
$cfg['ThemeManager'] and
$cfg['ThemeDefault'].
Under $cfg['ThemePath'], you
should not delete the directory "original" or its underlying
structure, because this is the system theme used by phpMyAdmin.
"original" contains all images and styles, for backwards
compatibility and for all themes that would not include images or css-files.
If $cfg['ThemeManager']
is enabled, you can select your favorite theme on the main page. Your
selected theme will be stored in a cookie.
To create a theme:
In theme directory there is file info.inc.php which contains theme verbose name, theme generation and theme version. These versions and generations are enumerated from 1 and do not have any direct dependence on phpMyAdmin version. Themes within same generation should be backwards compatible - theme with version 2 should work in phpMyAdmin requiring version 1. Themes with different generation are incompatible.
If you do not want to use your own symbols and buttons, remove the directory "img" in "your_theme_name". phpMyAdmin will use the default icons and buttons (from the system-theme "original").
Here are a few points to check:
To be able to see a progress bar during your uploads, your server must have either the APC extension or the uploadprogress one. Moreover, the JSON extension has to be enabled in your PHP.
If using APC, you must set apc.rfc1867 to on in your php.ini.
This is related to the authentication mechanism (protocol) used by phpMyAdmin. To bypass this problem: just close all the opened browser windows and then go back to phpMyAdmin. You should be able to log in again.
Compressed dumps are built in memory and because of this are limited to php's memory limit. For GZip/BZip2 exports this can be overcome since 2.5.4 using $cfg['CompressOnFly'] (enabled by default). Zip exports can not be handled this way, so if you need Zip files for larger dump, you have to use another way.
This is an InnoDB bug, see http://bugs.mysql.com/bug.php?id=21704.
The problem is that older versions of mysqldump created invalid comments like this:
-- MySQL dump 8.22 -- -- Host: localhost Database: database --------------------------------------------------------- -- Server version 3.23.54
The invalid part of the code is the horizontal line made of dashes that
appears once in every dump created with mysqldump. If you want to run your
dump you have to turn it into valid MySQL. This means, you have to add a
whitespace after the first two dashes of the line or add a # before it:
-- -------------------------------------------------------
or
#---------------------------------------------------------
Please note that you should not use the separating string multiple times without any characters between them, or at the beginning/end of your table name. If you have to, think about using another TableSeparator or disabling that feature
In Relation view, being able to choose a table in another database,
or having more than one index field in the foreign key.
In Query-by-example (Query), automatic generation of the query
LEFT JOIN from the foreign table.
Your table neither have a primary key nor an unique one, so we must use a
long expression to identify this row. This causes problems to parse_url
function. The workaround is to create a primary or unique key.
Due to a surrounding form-container (for multi-row delete checkboxes), no nested forms can be put inside the table where phpMyAdmin displays the results. You can, however, use any form inside of a table if keep the parent form-container with the target to tbl_row_delete.php and just put your own input-elements inside. If you use a custom submit input field, the form will submit itself to the displaying page again, where you can validate the $HTTP_POST_VARS in a transformation. For a tutorial on how to effectively use transformations, see our Link section on the official phpMyAdmin-homepage.
When MySQL is running in ANSI-compatibility mode, there are some major differences in how SQL is structured (see http://dev.mysql.com/doc/mysql/en/ANSI_mode.html). Most important of all, the quote-character (") is interpreted as an identifier quote character and not as a string quote character, which makes many internal phpMyAdmin operations into invalid SQL statements. There is no workaround to this behaviour. News to this item will be posted in Bug report #816858
Please make sure that your table has a primary key, so that phpMyAdmin can use it for the Edit and Delete links.
phpMyAdmin uses a quick method to get the row count, and this method only returns an approximate count in the case of InnoDB tables. See $cfg['MaxExactCount'] for a way to modify those results, but this could have a serious impact on performance.
The number of records in queries containing COUNT and GROUP BY is not correctly calculated. Also, sorting results of a query like "SELECT * from table GROUP BY" ... is problematic.
The tests I have made with current MySQL 4.1.11 API shows that the API does not accept this syntax for the USE command. Enclosing the db name with backquotes works. For further confusion, no backquotes are needed with command-line mysql.
This has been a known limitation of phpMyAdmin since the beginning and it's not likely to be solved in the future.
phpMyAdmin uses the PHPExcel library to parse Excel XLS and XLSX spreadsheets.
Therefore, any limitations that are listed on their page regarding Excel calculations will also apply here.
PHPExcel will be kept up to date so as to make all improvements available to phpMyAdmin users.
Since Excel XLSX workbooks are already compressed, there is often times only a small benefit from compressing them yet again. Support for compressed Excel XLSX and XLS workbooks may be added in the future.
Excel's internal representation of custom cell types is rather muddled (especially in Excel 97-2003 binary XLS files). If possible, consider using a built-in type. These are almost always guarenteed to import correctly.
There is no reliable way to differetiate tables in CSV format. For the time being, you will have to break apart CSV files containing multiple tables.
Currently, the import type-detection system can only assign these MySQL types to columns. In future, more will likely be added but for the time being
you will have to edit the structure to your liking post-import.
Also, you should note the fact that phpMyAdmin will use the size of the largest item in any given column as the column size for the appropriate type. If you
know you will be adding larger items to that column then you should manually adjust the column sizes accordingly. This is done for the sake of efficiency.
Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your users. The development of this feature was kindly sponsored by NetCologne GmbH. This requires a properly setup MySQL user management and phpMyAdmin HTTP or cookie authentication. See the install section on "Using HTTP authentication".
This depends on your system.
If you're running a server which cannot be accessed by other people, it's
sufficient to use the directory protection bundled with your webserver
(with Apache you can use .htaccess files, for example).
If other people have telnet access to your server, you should use
phpMyAdmin's HTTP or cookie authentication features.
Suggestions:
Check php.ini, or ask your sysadmin to check it. The include_path must contain "." somewhere in it, and open_basedir, if used, must contain "." and "./lang" to allow normal operation of phpMyAdmin.
This could happen for several reasons:
Starting with 2.2.5, in the user management page, you can enter a wildcard database name for a user (for example "joe%"), and put the privileges you want. For example, adding SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER would let a user create/manage his/her database(s).
If you have existing rules from an old .htaccess file, you can take them and add a username between the 'deny'/'allow' and 'from' strings. Using the username wildcard of '%' would be a major benefit here if your installation is suited to using it. Then you can just add those updated lines into the $cfg['Servers'][$i]['AllowDeny']['rules'] array.
If you want a pre-made sample, you can try this fragment. It stops the 'root' user from logging in from any networks other than the private network IP blocks.
//block root from logging in except from the private networks $cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow'; $cfg['Servers'][$i]['AllowDeny']['rules'] = array( 'deny root from all', 'allow root from localhost', 'allow root from 10.0.0.0/8', 'allow root from 192.168.0.0/16', 'allow root from 172.16.0.0/12', );
This happens if you are using a URL to start phpMyAdmin which is different than the one set in your $cfg['PmaAbsoluteUri']. For example, a missing "www", or entering with an IP address while a domain name is defined in the config file.
When starting phpMyAdmin, you can use the db, pma_username, pma_password and server parameters. This last one can contain either the numeric host index (from $i of the configuration file) or one of the host names present in the configuration file. Using pma_username and pma_password has been tested along with the usage of 'cookie' auth_type.
We could reproduce this problem only under Win98/98SE. Testing under
WinNT4 or Win2K, we could easily create more than 60 fields.
A workaround is to create a smaller number of fields, then come back to
your table properties and add the other fields.
This is not a phpMyAdmin problem but a Xitami known bug: you'll face it
with each script/website that use forms.
Upgrade or downgrade your Xitami server.
With Konqueror 2.1.1: plain dumps, zip and GZip dumps work ok, except that
the proposed file name for the dump is always 'tbl_dump.php'. Bzip2 dumps
don't seem to work.
With Konqueror 2.2.1: plain dumps work; zip dumps are placed into
the user's temporary directory, so they must be moved before closing
Konqueror, or else they disappear. GZip dumps give an error message.
Testing needs to be done for Konqueror 2.2.2.
MS Internet Explorer seems to be really buggy about cookies, at least till version 6.
Upgrade to at least Internet Explorer 5.5 SP2.
Your table neither have a primary key nor an unique one, so we must use a
long URL to identify this row. There is a limit on the length of the URL in
those browsers, and this not happen in Netscape, for example. The
workaround is to create a primary or unique key, or use another browser.
Some browsers support right-clicking into the frame you want to refresh,
just do this in the right frame.
Looks like a Mozilla bug: 0.9.6 was OK. We will keep an eye on future
Mozilla versions.
This is a Mozilla bug (see bug #26882 at
BugZilla).
This is a known Netscape 4.75 bug: it adds some line feeds when exporting data in octet-stream mode. Since we can't detect the specific Netscape version, we cannot workaround this bug.
Please ensure that you have set your browser's character set to the one of the language file you have selected on phpMyAdmin's start page. Alternatively, you can try the auto detection mode that is supported by the recent versions of the most browsers.
This issue has been reported by a OS X user, who adds that Chimera, Netscape and Mozilla do not have this problem.
This is a bug in Internet Explorer, other browsers do not behave this way.
Please upgrade to Opera7 at least.
Please upgrade to at least version 1.2.3.
Please check the following points:
Many users have confirmed that the Tabbrowser Extensions plugin they installed in their Firefox is causing the problem.
This happens only when both of these conditions are met: using the http authentication mode and register_globals being set to On on the server. It seems to be a browser-specific problem; meanwhile use the cookie authentication mode.
Examine the SQL error with care. Often the problem is caused by
specifying a wrong field-type.
Common errors include:
Also, look at the syntax chapter in the MySQL manual to confirm that your syntax is correct.
This is the way to create a multi-fields index. If you want two indexes, create the first one when creating the table, save, then display the table properties and click the Index link to create the other index.
Since version 2.2.3, you have a checkbox for each field that can be null. Before 2.2.3, you had to enter "null", without the quotes, as the field's value. Since version 2.5.5, you have to use the checkbox to get a real NULL value, so if you enter "NULL" this means you want a literal NULL in the field, and not a NULL value (this works in PHP4).
Click on a database or table name in the left frame, the properties will be
displayed. Then on the menu, click "Export", you can dump
the structure, the data, or both. This will generate standard SQL
statements that can be used to recreate your database/table.
You will need to choose "Save as file", so that phpMyAdmin can
transmit the resulting dump to your station. Depending on your PHP
configuration, you will see options to compress the dump. See also the
$cfg['ExecTimeLimit']
configuration variable.
For additional help on this subject, look for the word "dump" in
this document.
Click on a database name in the left frame, the properties will be
displayed. Select "Import" from the list
of tabs in the right–hand frame (or "SQL" if your phpMyAdmin
version is previous to 2.7.0). In the "Location of the text file" section, type in
the path to your dump filename, or use the Browse button. Then click Go.
With version 2.7.0, the import engine has been re–written, if possible it is suggested
that you upgrade to take advantage of the new features.
For additional help on this subject, look for the word "upload"
in this document.
Here is an example with the tables persons, towns and countries, all located in the database mydb. If you don't have a pma_relation table, create it as explained in the configuration section. Then create the example tables:
CREATE TABLE REL_countries ( country_code char(1) NOT NULL default '', description varchar(10) NOT NULL default '', PRIMARY KEY (country_code) ) TYPE=MyISAM; INSERT INTO REL_countries VALUES ('C', 'Canada'); CREATE TABLE REL_persons ( id tinyint(4) NOT NULL auto_increment, person_name varchar(32) NOT NULL default '', town_code varchar(5) default '0', country_code char(1) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM; INSERT INTO REL_persons VALUES (11, 'Marc', 'S', ''); INSERT INTO REL_persons VALUES (15, 'Paul', 'S', 'C'); CREATE TABLE REL_towns ( town_code varchar(5) NOT NULL default '0', description varchar(30) NOT NULL default '', PRIMARY KEY (town_code) ) TYPE=MyISAM; INSERT INTO REL_towns VALUES ('S', 'Sherbrooke'); INSERT INTO REL_towns VALUES ('M', 'Montréal');
To setup appropriate links and display information:
Then test like this:
Starting from the previous example, create the pma_table_info as explained
in the configuration section, then browse your persons table,
and move the mouse over a town code or country code.
See also FAQ 6.21 for an additional feature that "display field"
enables: drop-down list of possible values.
First the configuration variables "relation",
"table_coords" and "pdf_pages" have to be filled in.
Then you need to think about your schema layout. Which tables will go on
which pages?
No, it's MySQL that is doing silent column type changing.
If you do not put a backslash before the underscore, this is a wildcard
grant, and the underscore means "any character". So, if the
database name is "john_db", the user would get rights to john1db,
john2db ...
If you put a backslash before the underscore, it means that the database
name will have a real underscore.
It means "average".
Structure:
Data:
This is a bad idea, because in MySQL the syntax "database.table" is the normal way to reference a database and table name. Worse, MySQL will usually let you create a database with a dot, but then you cannot work with it, nor delete it.
To use it, you need a very recent version of PHP, 4.3.0 recommended, with
XML,
PCRE and
PEAR support.
On your system command line, run "pear install Net_Socket Net_URL
HTTP_Request Mail_Mime Net_DIME SOAP" to get the necessary
PEAR modules
for usage.
On a more recent pear version, I had problems with the state of Net_DIME
being beta, so this single command
"pear -d preferred_state=beta install -a SOAP" installed all the
needed modules.
If you use the Validator, you should be aware that any
SQL statement you
submit will be stored anonymously (database/table/column names,
strings, numbers replaced with generic values). The Mimer
SQL
Validator itself, is © 2001 Upright Database Technology.
We utilize it as free SOAP service.
The right way to do this, is to create the field without any indexes, then display the table structure and use the "Create an index" dialog. On this page, you will be able to choose your BLOB field, and set a size to the index, which is the condition to create an index on a BLOB field.
You can use Ctrl+arrows (Option+Arrows in Safari) for moving on most pages with many editing fields (table structure changes, row editing, etc.) (must be enabled in configuration - see. $cfg['CtrlArrowsMoving']). You can also have a look at the directive $cfg['DefaultPropDisplay'] ('vertical') and see if this eases up editing for you.
Slow down :). Defining mimetypes is of no use, if you can't put transformations
on them. Otherwise you could just put a comment on the field. Because entering
your own mimetype will cause serious syntax checking issues and validation,
this introduces a high-risk false-user-input situation. Instead you have to
initialize mimetypes using functions or empty mimetype definitions.
Plus, you have a whole overview of available mimetypes. Who knows all those
mimetypes by heart so he/she can enter it at will?
Any query you have executed can be stored as a bookmark on the page where the
results are displayed. You will find a button labeled 'Bookmark this query'
just at the end of the page.
As soon as you have stored a bookmark, it is related to the database you run
the query on. You can now access a bookmark dropdown on each page, the query
box appears on for that database.
Since phpMyAdmin 2.5.0 you are also able to store variables for the bookmarks.
Just use the string /*[VARIABLE]*/ anywhere in your query. Everything
which is put into the value input box on the query box page will
replace the string "/*[VARIABLE]*/" in your stored query. Just be
aware of that you HAVE to create a valid query, otherwise your query won't be
even able to be stored in the database.
Also remember, that everything else inside the /*[VARIABLE]*/ string
for your query will remain the way it is, but will be stripped of the /**/
chars. So you can use:
/*, [VARIABLE] AS myname */
which will be expanded to
, VARIABLE as myname
in your query, where VARIABLE is the string you entered in the input box. If
an empty string is provided, no replacements are made.
A more complex example. Say you have stored this query:
SELECT Name, Address FROM addresses WHERE 1 /* AND Name LIKE '%[VARIABLE]%' */
Say, you now enter "phpMyAdmin" as the variable for the stored query,
the full query will be:
SELECT Name, Address FROM addresses WHERE 1 AND Name LIKE '%phpMyAdmin%'
You can use multiple occurrences of /*[VARIABLE]*/ in a single query.
NOTE THE ABSENCE OF SPACES inside the "/**/" construct. Any
spaces inserted there
will be later also inserted as spaces in your query and may lead to unexpected
results especially when
using the variable expansion inside of a "LIKE ''" expression.
Your initial query which is going to be stored as a bookmark has to yield at
least one result row so
you can store the bookmark. You may have that to work around using well
positioned "/**/" comments.
You can simply include table in your LATEX documents, minimal sample
document should look like following one (assuming you have table
exported in file table.tex
):
\documentclass{article} % or any class you want \usepackage{longtable} % for displaying table \begin{document} % start of document \include{table} % including exported table \end{document} % end of document
You have one of these global privileges: CREATE
TEMPORARY TABLES, SHOW DATABASES, LOCK TABLES. Those privileges also
enable users to see all the database names.
See this bug report.
So if your users do not need those privileges, you can remove them and their
databases list will shorten.
You have to setup appropriate links between the tables, and also
setup the "display field" in the foreign table. See
FAQ
6.6 for an example. Then, if there are 100 values or less in the
foreign table, a drop-down list of values will be available.
You will see two lists of values, the first list containing the key
and the display field, the second list containing the display field
and the key. The reason for this is to be able to type the first
letter of either the key or the display field.
For 100 values or more, a distinct window will appear, to browse foreign
key values and choose one. To change the default limit of 100, see
$cfg['ForeignKeyMaxLimit'].
Yes. If a bookmark has the same label as a table name, it will be executed.
You can use CSV for Microsoft Excel, which works out of the box, but phpMyAdmin supports direct export to Microsoft Excel version 97 and newer. For this to work, you need to set $cfg['TempDir'] to a place where the web server user can write (for example './tmp').
To create the temporary directory on a UNIX-based system, you can do:
cd phpMyAdmin mkdir tmp chmod o+rwx tmp
Automatic migration of a table's pmadb-style column comments to the native ones is done whenever you enter Structure page for this table.
First, for general information about BLOB streaming on MySQL, visit blobstreaming.org. We currently support streaming if you are running MySQL 5.1 with the PBXT and PBMS storage engines. Moreover, only PBMS 0.5.04 is supported.
Click the first row of the range, hold the shift key and click the last row of the range. This works everywhere you see rows, for example in Browse mode or on the Structure page.
Our Bug Tracker is located at
http://sf.net/projects/phpmyadmin/
under the Bugs section.
But please first discuss your bug with other users:
http://sf.net/projects/phpmyadmin/ (and choose Forums)
Always use the current SVN version of your language file.
For a new language, start from english-utf-8.inc.php. If you
don't know how to get the SVN version, please ask one of the developers.
Please note that we try not to use HTML entities like é in
the translations, since we define the right character set in the file.
With HTML entities, the text on JavaScript messages would not
display correctly.
However there are some entities that need to be there, for quotes
,non-breakable spaces, ampersands, less than, greater than.
You can then put your translations, as a zip file to avoid losing special
characters, on the sourceforge.net translation tracker.
It would be a good idea to subscribe to the phpmyadmin-translators mailing
list, because this is where we ask for translations of new messages.
The following method is preferred for new developers:
More details on git are available on our wiki.
Write access to the repository is granted only to experienced developers who
have already contributed something useful to phpMyAdmin.
Also, have a look at the Developers section.
Please refer to http://www.phpmyadmin.net/home_page/security.php
If you use Apache web server, phpMyAdmin exports information about authentication to Apache environment and it can be used in Apache logs. Currently there are two variables available:
userID
userStatus
ok
(user is
logged in), mysql-denied
(MySQL denied user login),
allow-denied
(user denied by allow/deny rules),
root-denied
(root is denied in configuration),
empty-denied
(empty password is denied).
LogFormat
directive for Apache can look like following:
LogFormat "%h %l %u %t \"%r\" %>s %b \ \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined
You can then use any log analyzing tools to detect possible break-in attempts.
You can now synchronize databases/tables in phpMyAdmin using the Synchronize feature. It allows you to connect to local as well as remote servers.This requires you to enter server host name, username, password, port and the name of the database. Therefore you can now synchronize your databases placed on the same server or some remote server.
For more details see How to synchronize
phpMyAdmin is Open Source, so you're invited to contribute to it. Many great features have been written by other people and you too can help to make phpMyAdmin a useful tool.
If you're planning to contribute source, please read the following information:
$cfg['Error_Handler']['display']
configuration directive.Copyright (C) 1998-2000 Tobias Ratschiller <tobias_at_ratschiller.com> Copyright (C) 2001-2010 Marc Delisle <marc_at_infomarc.info> Olivier Müller <om_at_omnis.ch> Robin Johnson <robbat2_at_users.sourceforge.net> Alexander M. Turek <me_at_derrabus.de> Michal Čihař <michal_at_cihar.com> Garvin Hicking <me_at_supergarv.de> Michael Keck <mkkeck_at_users.sourceforge.net> Sebastian Mendel <cybot_tm_at_users.sourceforge.net> [check credits for more details]
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2, as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
And also to the following people who have contributed minor changes, enhancements, bugfixes or support for a new language since version 2.1.0:
Bora Alioglu, Ricardo ?, Sven-Erik Andersen, Alessandro Astarita, Péter Bakondy, Borges Botelho, Olivier Bussier, Neil Darlow, Mats Engstrom, Ian Davidson, Laurent Dhima, Kristof Hamann, Thomas Kläger, Lubos Klokner, Martin Marconcini, Girish Nair, David Nordenberg, Andreas Pauley, Bernard M. Piller, Laurent Haas, "Sakamoto", Yuval Sarna, www.securereality.com.au, Alexis Soulard, Alvar Soome, Siu Sun, Peter Svec, Michael Tacelosky, Rachim Tamsjadi, Kositer Uros, Luís V., Martijn W. van der Lee, Algis Vainauskas, Daniel Villanueva, Vinay, Ignacio Vazquez-Abrams, Chee Wai, Jakub Wilk, Thomas Michael Winningham, Vilius Zigmantas, "Manuzhai".
This work is based on Peter Kuppelwieser's MySQL-Webadmin. It was his idea to create a web-based interface to MySQL using PHP3. Although I have not used any of his source-code, there are some concepts I've borrowed from him. phpMyAdmin was created because Peter told me he wasn't going to further develop his (great) tool.
Thanks go to
The following people have contributed minor changes, enhancements, bugfixes or support for a new language:
Jim Kraai, Jordi Bruguera, Miquel Obrador, Geert Lund, Thomas Kleemann, Alexander Leidinger, Kiko Albiol, Daniel C. Chao, Pavel Piankov, Sascha Kettler, Joe Pruett, Renato Lins, Mark Kronsbein, Jannis Hermanns, G. Wieggers.
And thanks to everyone else who sent me email with suggestions, bug-reports and or just some feedback.
From Wikipedia, the free encyclopedia