为什么这在我的开发服务器上运行,但不在实时服务器上?

时间:2013-10-18 15:32:40

标签: php mysql

我有一个我正在研究的网站,其中包含一个mysql数据库中的所有网站内容。我最近添加了访问者注册以访问受限内容的功能。这包括注册,更改密码和检索丢失的密码等。由于访问者需要选择,插入和更新权限,我担心将这些权限授予整个站点数据库的未知访问者,所以我选择制作外部用户的单独数据库。

一切正常,注册,激活,更改密码和检索密码。现在的问题是我试图从一般网站内容的同一管理区域内访问ext_users数据库,但它只适用于我的开发服务器(MAMP Pro 2.1.1,Apache 2.2.22,mysql 5.5.25, php 5.4.4)不在我的实时服务器上(centos 5.9 i686 virtuozzo - vps,Apache 2.2.21,mysql 5.0.96,php 5.?)这就是我所做的。

我创建了两个连接脚本,每个脚本都有自己的变量,并为admin.php中的每个创建了一个require_once()。第一个是通用站点DB:

    $hostname_siteadmin = "localhost";
    $database_siteadmin = "generalsiteDB";
    $username_siteadmin = "generalsiteUSER";
    $password_siteadmin = "generalsitePWD";
    $siteadmin = mysql_pconnect($hostname_siteadmin, $username_siteadmin, $password_siteadmin) or trigger_error(mysql_error(),E_USER_ERROR); 

第二个是外部用户DB:

    $hostname_vusradmin = "localhost";
    $database_vusradmin = "extusersiteDB";
    $username_vusradmin = "extusersiteUSER";
    $password_vusradmin = "extusersitePWD";
    $vusradmin = mysql_pconnect($hostname_vusradmin, $username_vusradmin, $password_vusradmin) or trigger_error(mysql_error(),E_USER_ERROR);

正如我所说,在我的测试服务器上,这没有问题,但在生产服务器上只有最后加载的连接脚本才有效。这似乎表明存在变量冲突,但同样,每个连接脚本的变量也不同,如上所示。我的错误处理脚本在尝试查看注册用户时返回此错误:

mysql_num_rows(): supplied argument is not a valid MySQL result resource

它指向第33行,它是此mysql查询中的最后一行:

mysql_select_db($database_vusradmin, $vusradmin);
$query = "SELECT user_id FROM ext_users";
$result = mysql_query($query);
$totalrecords = mysql_num_rows($result);

当我查看错误处理脚本的输出时,我看到两个不同的连接变量,每个连接变量都被分配了一个资源ID。我还看到每个连接的用户名和密码,它们都是正确的。第33行上的错误似乎表明查询没有产生任何内容,这由错误消息内容证实:

[query] => SELECT user_id FROM ext_users
[result] => 

结果为空。

总而言之,这在我的开发服务器上完美运行,但在我的生产服务器上却没有。错误报告显示正在建立的两个连接,每个连接都具有正确的用户名和密码。已为每个连接分配了单独的资源ID,但是与ext_users的第一个数据库交互(选择查询)失败。我已检查,双重检查并三次检查连接脚本的值与实时服务器上的值,并且它们都是正确的。我有一个数据库用户vuseradm,在实时服务器上具有选择,插入,更新和删除权限。这可能是什么?是否存在可能影响此服务器的服务器设置?

非常欢迎任何有用的建议。

解决

我重新创建了连接脚本和mysql_select_db以及查询,现在它正常工作。我仍然没有看到原版和新版本之间存在差异,但嘿,谁在乎,它现在工作正常。

对不起因为这个微不足道但却令人沮丧的事情困扰每个人。非常感谢所有回复的人。

1 个答案:

答案 0 :(得分:3)

如果$ result不是有效的结果资源,那么找出它为什么无效:

$result = mysql_query($query) or die(mysql_error());
                             ^^^^^^^^^^^^^^^^^^^^^^

var_dump($result)可能会显示它是一个布尔值FALSE,表示失败。