在 mysql_select_db 之后,MySql 查询没有在正确的数据库上运行

Posted

技术标签:

【中文标题】在 mysql_select_db 之后,MySql 查询没有在正确的数据库上运行【英文标题】:MySql query not running on the correct database after mysql_select_db 【发布时间】:2016-06-23 14:41:22 【问题描述】:

首先,我知道这个系统不应该再使用 mysql_ 函数了,但确实如此。

系统正在连接到两个数据库。在运行查询之前,它使用 mysql_select_db() 选择要在其上运行查询的正确数据库。正确的数据库是“database2”。与数据库本身的连接有效,mysql_select_db 函数返回 true/1。

代码在本地工作,但在服务器上不工作......

这是一个失败的查询示例...

global $DBtwo;

mysql_select_db('database2', $DBtwo);

$sql = "INSERT INTO table
         (Column1, Column2, Column3)
     VALUES
         ('Value1', 'Value2', 'Value3')";

$result = mysql_query($sql, $DBtwo);

die(mysql_error());

此脚本返回以下输出...

Table 'database1.table' doesn't exist

该错误表明查询是在 database1 上执行的,而不是在 database2 上执行的。但是,在运行查询之前已成功选择 database2。

如前所述,此错误仅发生在服务器上。在本地运行查询并使用正确的数据库。

非常欢迎任何建议或指示。干杯。

【问题讨论】:

您只是假设 select_db 调用成功。 mysql_select_db(...) or die(mysql_error($DBtwo)) 并请注意,如果您打开了 MULTIPLE 数据库连接,您的错误调用将使用最后打开的连接,因为您没有明确列出连接句柄。这意味着您可能正在检查 WRONG db 句柄上的错误。 感谢您的回复,我正在调查... 停止使用 MySQL 并研究MySQLi以及/或PDO。您也可以很好地使用 OOP 方法进行研究,因为使用这种代码结构不太可能甚至不可能实现混淆数据库的问题。 你说的很对。由于未传递资源,mysql_error() 具有误导性。总的来说,我对连接的使用很糟糕,您已经解决了我的问题,谢谢。 谢谢马丁,我很乐意但不幸的是没有人付钱让我这样做:( 【参考方案1】:

Marc B 的评论解决了我的问题,所以归功于他。

mysql_error 函数返回误导信息,因为它没有被传递资源。

mysql_select_db 确实在工作。它给人的印象是通过没有将正确的资源传递给 mysql_error 的组合而无法工作。最重要的是,由于同样的原因,mysql_insert_id() 无法正常工作,导致函数整体返回 false。

我现在觉得自己很愚蠢,但不那么恼火了。非常感谢!

【讨论】:

如果这解决了您的问题,那么您也可以接受它作为答案,以便其他人可以从中受益。

以上是关于在 mysql_select_db 之后,MySql 查询没有在正确的数据库上运行的主要内容,如果未能解决你的问题,请参考以下文章

windows 下mysq安装之后的数据恢复案例

mysq

Mysq的安装

mysql_select_db() 期望参数 2 是资源,给定 PHP 验证的对象

当mysq启动时出现错误1067时应如何解决

mysql_select_db被废除后在php7用啥?