我对 php 和 mysql 有一个非常奇怪的问题。我在我的 php 脚本中执行以下操作:
$query1 = "SELECT * FROM ".$src;
$ans1 = mysql_query($query1,$vitoquenId);
echo "<p>Query: \"".$query1."\"<br/>Error: \"".mysql_error()."\"<br/>Total rows extracted: ".mysql_num_rows($ans1)."</p>";
执行此操作时,这是输出:
Query: "SELECT * FROM Almacen"
Error: ""
Total rows extracted: 0
问题是,我不应该得到 0 行,奇怪的是没有报告错误。我为我的用户授予了所有权限,甚至尝试以 root 用户身份连接到数据库,但得到了相同的行为。
直接在 mysql 命令行中进行查询时,我得到以下信息:
mysql> SELECT * FROM Almacen;
+----+-------------+------------+--------+
| id | nombre | tipo | status |
+----+-------------+------------+--------+
| 1 | Tienda | Principal | Activo |
| 2 | Dep�sito | Secundario | Activo |
| 3 | Chaguaramos | Secundario | Activo |
+----+-------------+------------+--------+
3 rows in set (0.00 sec)
我尝试过使用 xampp 服务器以及我自己配置的服务器,并且得到了相同的行为。我检查了我想到的每个日志,配置了 mysql 来记录每个查询,似乎没有任何异常发生。
mysql 日志显示以下内容:
110802 16:21:49 101 Connect victor@localhost on
101 Init DB saw
101 Init DB sawprueba
101 Query SELECT * FROM Almacen
101 Quit
apache 日志不显示任何内容,站点特定日志也不显示。拜托,任何试图破译这一点的线索都会非常感激!!!谢谢!!!=)
编辑:
我发现了问题。它与aefxx的回答有关。
我正在编写的程序是一个迁移工具。它从一个数据库中提取信息,对其进行处理,然后将其插入另一个数据库。为此,我需要连接到两个数据库。我使用 php文档中建议的单例模式通过两个类建立连接。您可以在github repo中看到连接文件。
为了建立到数据库的连接,我这样调用这个类:
$vitoquen = Vitoquen::singleton();
$newVitoquen = NewVitoquen::singleton();
$vitoquenId = $vitoquen->getId();
$newVitoquenId = $newVitoquen->getId();
发生的事情是,由于某种原因,它没有创建两个单独的连接,而是只创建一个连接,并使用第二个数据库,即新的数据库,它是空的。当我看到 mysql 日志时,我得到了线索:
110802 16:21:49 101 Connect victor@localhost on
101 Init DB saw
101 Init DB sawprueba
101 Query SELECT * FROM Almacen
101 Quit
它显示101 Init DB两次;一为saw
,一为sawprueba
。现在我不明白为什么它不创建两个单独的连接......有什么建议吗???
非常感谢您的帮助!!!=)
编辑:
我还不能自我回答,但这是我问题的解决方案。无论如何,感谢那些花时间阅读(和一些回答)的人!
正如php mysql_connect() function的文档中所见,它接收一个名为 的可选参数new_link
,这是false
默认情况下的。
new_link
如果使用相同的参数对 mysql_connect() 进行第二次调用,则不会建立新链接,而是返回已打开链接的链接标识符。new_link 参数修改了这种行为并使 mysql_connect() 始终打开一个新链接,即使之前使用相同的参数调用了 mysql_connect() 也是如此。在 SQL 安全模式下,此参数被忽略。
所以,我只需要在两个连接类中对 mysql_connect() 的调用添加一个 true 作为附加的最后一个参数。已解决 =)