phpMyAdmin を利用している時に権限があるはずなのに、メニューにトリガが表示されない現象が発生。
早速追跡~
Menu.class.php の _getTableTabs() を見てみるとどうやら、
PMA_Util::currentUserHasPrivilege(
'TRIGGER',
$this->_db,
$this->_table
)
の部分でfalseが返っている。
次に Util.class.php の currentUserHasPrivilege を見ると
if ($db !== null) {
// need to escape wildcards in db and table names, see bug #3566
// (wildcard characters appear as being quoted with a backslash
// when querying TABLE_SCHEMA.SCHEMA_PRIVILEGES)
$db = str_replace(array('%', '_'), array('\%', '\_'), $db);
/*
* This is to take into account a wildcard db privilege
* so we replace % by .* and _ by . to be able to compare
* with REGEXP.
*
* Also, we need to double the inner % to please sprintf().
*/
$query .= " AND '%s' REGEXP"
. " REPLACE(REPLACE(TABLE_SCHEMA, '_', '.'), '%%', '.*')";
$schema_privileges = $GLOBALS['dbi']->fetchValue(
sprintf(
$query,
'SCHEMA_PRIVILEGES',
$username,
$priv,
self::sqlAddSlashes($db)
)
);
if ($schema_privileges) {
return true;
}
} else {
// There was no database name provided and the user
// does not have the correct global privilege.
return false;
}
ここでtrueが返ってくるはずが返ってこない。。
どうやら
$db = str_replace(array('%', '_'), array('\%', '\_'), $db);
でDB名に % _ が入っている場合にエスケープするみたい。
コメントアウトを見てみると英語は解らないけど、どうやら
LIKE検索などする時の問題に対応するために行っている(MYSQLの問題?)
何かあったなそんなのが。。
結局、DB名を変更して無事解決でした。