Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
phpMyAdmin:从之后忽略默认数据库_Php_Mysql_Database_Mysqli_Phpmyadmin - Fatal编程技术网

phpMyAdmin:从之后忽略默认数据库

phpMyAdmin:从之后忽略默认数据库,php,mysql,database,mysqli,phpmyadmin,Php,Mysql,Database,Mysqli,Phpmyadmin,这是一个非常恼人的异常,只发生在phpMyAdmin中,而不是通过php的mysqli或mysql命令行 我有两个数据库,foo和bar。 foo.bananaTable.monkeyId是bar.monkey.id的外键 因此,无论在何处执行,下面的SQL都可以正常工作,如下所示: SELECT bananaTable.ripeness as 'ripeness' FROM bar.monkey as monkey JOIN foo.bananaTable as bananaTable ON

这是一个非常恼人的异常,只发生在phpMyAdmin中,而不是通过php的mysqli或mysql命令行

我有两个数据库,foo和bar。 foo.bananaTable.monkeyId是bar.monkey.id的外键

因此,无论在何处执行,下面的SQL都可以正常工作,如下所示:

SELECT bananaTable.ripeness as 'ripeness'
FROM bar.monkey as monkey
JOIN foo.bananaTable as bananaTable ON bananaTable.monkeyId = monkey.id
现在,如果您导航到phpMyAdmin中的foo数据库,如果您没有在SQL中显式地命名一个数据库,它将有效地使用foo作为默认数据库。因此,下面的SQL在联接中省略了foo db作用域,应该可以工作

它在php mysqli和mysql命令行中都可以工作。但它在phpMyAdmin中不起作用。您会收到一个错误,指出1146 Table bar.bananaTable不存在

这告诉我FROM完全劫持了我在phpMyAdmin中的默认数据库。事实上,如果你编辑它并再次运行它,你会注意到它实际上将你移到了bar数据库中。。。WTF

好吧,我又试了一件事:

USE foo;
SELECT bananaTable.ripeness as 'ripeness'
FROM bar.monkey as monkey
JOIN bananaTable as bananaTable ON bananaTable.monkeyId = monkey.id
…试图强迫它。还是不行


有人见过这个吗?这只是phpMyAdmin试图变得太聪明的产物吗?是否有一个以此为中心的配置?或者这是MySql中我需要注意的一些奇怪之处?我完全支持显式db命名,但出于安全原因,我们从一开始就指定了默认值。

未指定phpMyAdmin版本,但它似乎与版本无关。以下测试在最新版本的phpMyAdmin中显示了相同的行为。在我看来像个虫子

- http://demo.phpmyadmin.net/master-config -phpMyAdmin演示服务器:当前正在运行Git修订版\u 4\u 3\u 0RC2-1597-G611104 -在测试数据库中创建表 创建表(如果不存在) id int11不为空, `名称'varchar20不为空, fooID int11不为空 ENGINE=InnoDB AUTO_INCREMENT=3默认字符集=1; 插入到条id、名称、fooID值中 一,"第一",一,, 二是"第二",二是,; 更改表格栏 添加主键id; -在世界数据库中创建表 如果不存在“foo”,则创建表 `id`int11不为空, `val1`int11不为空 ENGINE=InnoDB默认字符集=1; 在'foo``id`、`val1`值中插入 1, 10, 2, 15; 改变表格'foo'` 添加主键'id'; -从表foo所在的世界数据库 -此查询按预期显示world作为默认/选定数据库。 选择数据库; -此查询应在world中运行,但在1146中失败-表“test.foo”不存在 选择b.*,f.val1 从test.bar到b 在f.id=b.fooID上将foo作为f左连接 其中1; -此查询通过显式的world.foo成功,但不应该是必需的 选择b.*,f.val1 从test.bar到b 左键在f.id=b.fooID上作为f加入world.foo 其中1;
USE foo;
SELECT bananaTable.ripeness as 'ripeness'
FROM bar.monkey as monkey
JOIN bananaTable as bananaTable ON bananaTable.monkeyId = monkey.id