0

我对 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 作为附加的最后一个参数。已解决 =)

4

3 回答 3

1

连接到 DBMS 时是否选择了正确的数据库(也称为方案)?

例子:

mysql_select_db("mydatabase", $link);
于 2011-08-02T21:31:57.417 回答
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>";
于 2011-08-02T21:34:21.853 回答
0

对于到本地数据库的连接:

     $dbhost = 'localhost';
     $dbuser = 'root';
     $dbpass = '';
     $connection = mysql_connect($dbhost, $dbuser, $dbpass);
     mysql_select_db("mydatabase", $connection);
     $query1 = "SELECT * FROM ".$src;
     $ans1 = mysql_query($query1,$vitoquenId);
于 2019-11-18T11:54:53.343 回答