2

正如几乎所有地方所建议的那样,我正在尝试将连接到数据库的过程卸载到 DBConfig.php 文件,因为我需要在多个文件中重用代码。

该建议总是被框定为(编辑以反映我的实际代码):

-------DBConfig.php-------
<?php
$link = mysql_connect('localhost','user','pass');
if (!$link) {
  die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db('db_name');
if (!$db_selected) {
    die ('Can\'t use db_name : ' . mysql_error());
}
?>

-------Parent.php-------
<!DOCTYPE html>
<?php
require_once 'DBConfig.php';
$something = mysql_query("SELECT * FROM `table` LIMIT 0, 30 ");
// This query works fine if the mysql_connect() and
// mysql_select_db() stuff is in this script in place
// of the require_once.
$listofthings = array();
while($temp = mysql_fetch_array($something)){
    $listofthings[] = $temp;
}
// Do other things too
?>

但是当我尝试这样做时mysql_fetch_array($something),它会失败并显示警告:mysql_fetch_array() expects parameter 1 to be resource, boolean given


请记住,如果我只是将 的内容DBConfig.php放入父脚本而不是require 'DBConfig.php';...

并且还注意到print(require 'DBConfig.php'); //- 1(PHP 正在返回 1 表示它已成功定位并包含该文件。参见示例 5)...

发生了什么事,我该如何解决?我正在使用在 Windows 7 x64 上运行的WAMPServer(Apache 2.4.2、PHP 5.4.3)的默认配置。

4

5 回答 5

3

如果这

require 'DBConfig.php';

就是你正在做的事情,绝对不可能在其他范围内执行脚本。如果您使用的是http://URL,那将是原因,但如果您像您一样使用相对路径,则不会。

在连接到数据库之后,也没有在mysql_query()调用之后进行任何错误检查,因此更有可能只是查询中断。为您的查询添加适当的错误检查,您将了解更多。

另一种可能性是如果您DBConfig.php在函数内部调用。函数会弄乱您的包含范围。但是你的例子中没有,所以我假设这不是问题。

于 2012-10-27T17:12:48.717 回答
0

可能您的查询有一些错误。尝试 mysql_query($query) or die( mysql_error() );

mysql_query() 出错时返回 FALSE(布尔值)。

于 2012-10-27T17:15:33.863 回答
0

需要知道你在变量 $pretend_this_var_is_a_querystring 中给出了什么。如果查询失败,通常会生成此错误。我们需要知道您在 mysql_query() 函数中传递的字符串。请检查您的查询字符串。

也在您的 DBConfig.php 中。它应该是

$db_selected = mysql_select_db('db_name', $link);
于 2012-10-27T17:13:56.177 回答
0

如果这是您正在使用的确切代码,请更改:

require 'DBConfig.php';

至:

require('DBConfig.php');
于 2012-10-27T17:29:12.453 回答
0

我认为您包含错误的文件。(名称相同,但位置不同)。

如果DBConfig.php您想要的文件位于您Parent.php尝试执行的同一目录中

require_once dirname(__FILE__).'/DBConfig.php';

当您包含DBConfig.php文件时,如果您将 DBConfig 的代码复制并粘贴到 parent.php 文件中,效果必须相同(在您的情况下)。如果这没有发生,那是因为:

  • 您包含的文件不是您认为的那样。(一些set_include_path在其他文件夹中)
  • 您包含的文件内容不是您想的那样。

没有别的办法。

于 2012-10-27T19:12:37.067 回答