【问题标题】:php multiple databases issuephp多数据库问题
【发布时间】:2010-12-16 02:48:37
【问题描述】:

我设置了两个数据库连接如下

$con1 = mysql_connect("localhost", "root", "pwd") or die (mysql_error());

$con2 = mysql_connect("localhost", "wordpress", "pwd", true) or die(mysql_error());

mysql_select_db("lab_ancp", $con1) or die(mysql_error());   
mysql_select_db("wordpress",$con2) or die(mysql_error());

效果很好

然后我在这样的页面上做一些查询:

$sql="select unome from associado where uid=$uid";
    $result=mysql_query($sql,$con1) or die(mysql_error());

它工作正常,之后我做了第二个这样的查询:

$sql="select ID, post_content, post_title, post_excerpt, meta_value
                    from wp_posts join (
                        select post_id, meta_value 
                        from wp_postmeta 
                            join (
                                select post_id from wp_postmeta
                                where meta_key='destaque' and meta_value='s'
                            )as t1 using(post_id)
                        where meta_key='pft_widescreen'
                    ) as t2 on (wp_posts.ID=t2.post_id)
                ORDER BY RAND() LIMIT 1";
            //echo $sql . "<br />";
            $row=mysql_fetch_assoc(mysql_query($sql,$con2)) or die(mysql_error());

再一次,一切都很好,但是……

$sql="select * from eventos where edatade>='$hoje' or edataate>='$hoje'";
            $result=mysql_query($sql, $con1) or die (mysql_error());

给出这个错误:

**

SELECT 命令拒绝用户 'wordpress'@'localhost' 用于表 '事件'

**

【问题讨论】:

    标签: php mysql mysql-error-1142


    【解决方案1】:

    从错误看来,您应该验证 wordpress 用户对 eventos 表的权限。您的代码似乎是正确的。

    如果您想验证这一点,可以尝试使用第二个连接“SELECT * from eventos”。将此作为脚本中的第一个查询。

    【讨论】:

    • 他在最后一个查询中使用 $con1,witch 使用 root@localhost,而不是 wordpress@localhost,witch 是 $con2
    【解决方案2】:

    解决了。

    不要问我原因,但我尝试更改前两行的顺序,即将 $con2 放在 $con1 之前,查询现在可以正常工作。

    我怀疑 ..."true" 参数与此有关。

    谢谢各位。

    【讨论】:

    • 您应该编辑您的问题并选择一个解决方案。如果您找到了解决方案,请回答您自己的问题并选择它。
    【解决方案3】:

    http://se2.php.net/manual/en/function.mysql-select-db.php#39095 http://se2.php.net/manual/en/function.mysql-select-db.php#93487

    似乎是mysql_select_db的问题,第二个链接是一种解决方案。

    我建议使用 phps mysqli(MySQL 改进扩展)而不是旧的 mysql 东西(不知道它是否解决了您的问题,但它解决了您可能遇到的其他问题)。

    【讨论】:

      【解决方案4】:

      我怀疑原因是连接仍在内存中,所以当您尝试执行第二个查询时,它使用最后一个连接。我对 Joomla 两个数据库使用问题有类似的问题。我正在寻找解决此问题的方法,我认为这是我们代码中缺少的规则。


      嘿!我明白了,问题是当您创建第二个连接时,默认 PHP 会为最后一个返回相同的引用。所以如果你需要一个新的连接,你应该准备一个 $new_link 为 true 的 mysql_connect,像这样

      $myconn = @mysql_connect($this->db2_host,$this->db2_user,$this->db2_pass, true);
      

      最后一个参数意味着你需要一个新的引用而不是最后一个。您可以找到更多信息:

      HEREHERE

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2012-04-17
        • 2011-02-13
        • 2015-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多