0

我有一个正在开发的站点,该站点的所有站点内容都在一个 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()。第一个是通用站点数据库:

    $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); 

第二个是外部用户数据库:

    $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 的第一个 DB 交互,即 Select 查询,失败了。我已经检查、双重检查和三次检查连接脚本的值与实时服务器上的值,它们都是正确的。我有一个数据库用户 vuseradm,在实时服务器上具有选择、插入、更新和删除权限。这可能是什么?是否有可能影响此的服务器设置?

任何有用的建议都将受到欢迎。

解决

我重新创建了连接脚本和 mysql_select_db 和查询,现在它工作得很好。我仍然看不出原始版本和新版本之间的区别在哪里,但是嘿,谁在乎呢,它现在工作正常。

很抱歉用这个微不足道但令人沮丧的事情打扰了大家。非常感谢所有回复的人。

4

1 回答 1

3

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

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

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

于 2013-10-18T15:37:00.303 回答