在 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 查询没有在正确的数据库上运行的主要内容,如果未能解决你的问题,请参考以下文章