2011-08-02 13 views
0

即时通讯与php和mysql有一个很奇怪的问题。 Im做在我的PHP脚本如下:奇怪的问题与PHP和MySQL。没有行时选择一切似乎是正常的?

执行此操作时
$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命令行直接IM做查询得到以下:

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 [email protected] on 
         101 Init DB saw 
         101 Init DB sawprueba 
         101 Query SELECT * FROM Almacen 
         101 Quit 

的Apache日志犯规显示任何东西,无论是现场特定的日志。请任何线索试图破译这将是非常apreciated!谢谢!!! =)

编辑:

我发现这个问题。它与aefxx的答案有关。

即时编写的程序是一个迁移工具。它从一个数据库中提取信息,处理它,并将其插入到另一个数据库中。为此,我需要连接到两个数据库。我使用php documentation中建议的单例模式通过两个类进行连接。您可以在github repo中看到连接文件。

作出数据库的连接,我调用这个类是这样的:

​​

正在发生的事情是,由于某种原因,它不会创建两个单独的连接,而是只创建一个连接,并使用第二个数据库,即新的数据库,它是空的。我得到的线索时,我看到了MySQL日志:

110802 16:21:49  101 Connect [email protected] on 
         101 Init DB saw 
         101 Init DB sawprueba 
         101 Query SELECT * FROM Almacen 
         101 Quit 

它显示101初始化DB两次;一个用于saw,另一个用于sawprueba。现在我不明白为什么它不会创建两个单独的连接...任何建议?

非常感谢您的帮助! =)

编辑:

我不能自我答案,但是这是解决我的问题。非常感谢那些花时间阅读(和一些回答)的人!

如在php mysql_connect() function的文档中所看到的,它接收一个可选参数new_link,默认为false

new_link
如果第二个电话是对mysql_connect()使用相同的 论点,没有新的链接将被建立,而是已经打开的链接的链接 标识将被退回。 new_link 参数修改了此行为,并且使mysql_connect()始终打开 一个新链接,即使以前使用相同的 参数调用了mysql_connect()。在SQL安全模式下,该参数被忽略。

所以,我只需要在这两个连接类中调用mysql_connect()时添加一个true作为附加的最后一个参数。 求助=)

+3

什么是'$ vitoquenId'?它是一个有效的MySQL资源吗? – TehShrike

+1

'var_dump' $ ans1 –

回答

1

当连接到你的DBMS时,你选择了正确的数据库(也称为方案)吗?

例子:

mysql_select_db("mydatabase", $link); 
1

让我们添加一些最小错误处理和一个额外的查询,看看有什么mysql的“认为”有关问题的表。

$query1 = "SHOW TABLE STATUS LIKE '$src'"; 
echo '<pre>Debug: query1=', $query1, "</pre>\n"; 
$ans1 = mysql_query($query1, $vitoquenId) 
    or die(mysql_error()); 
while (false!==($row=mysql_fetch_assoc($ans1))) { 
    foreach($row as $key=>$value) { 
     echo $key,'="', $value, '" '; 
    } 
    echo "<br />\n"; 
} 

$query1 = "SELECT * FROM ".$src; 
echo '<pre>Debug: query1=', $query1, "</pre>\n"; 
$ans1 = mysql_query($query1,$vitoquenId) 
    or die(mysql_error()); 
echo "<p>Query: \"".$query1."\"<br/>Error: \"".mysql_error()."\"<br/>Total rows extracted: ".mysql_num_rows($ans1)."</p>";