我最近在我的主机上升级了我的PHP版本,我认为它导致了这个错误。每当我启动apache并调用此include文件来访问数据库时,apache就会开始生成GIGABYTES错误。我查看日志并收到此错误
PHP警告:mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /var/www/html/includes/database.config.php on line 22
第22行是
while(($c = mysql_fetch_assoc($rsetCoupons)) !== false)
我猜它会在列出的每个地方产生错误。
有没有人知道造成这种情况的原因是什么?当前的PHP版本是
PHP 5.3.2(cli)(建于:2011年6月25日08:12:19)
版权所有(c)1997-2010 PHP小组
Zend Engine v2.3.0,版权所有(c)1998-2010 Zend Technologies
(显然我在代码开头删除了连接的变量)
@mysql_connect(MYSQL_HOST, MYSQL_USERNAME, MYSQL_PASSWORD);
@mysql_select_db(MYSQL_DATABASE);
define('DOMAIN', 'MYDOMAINISTHIS.com');
$parse_version = queryFetch('SELECT version,secret FROM version ORDER BY version_id DESC LIMIT 0,1');
$VERSION = $parse_version['version'];
$SECRET = $parse_version['secret'];
$VALID_COUPONS = array();
$rsetCoupons = query('SELECT * FROM coupons ORDER BY coupon_id ASC');
while(($c = mysql_fetch_assoc($rsetCoupons)) !== false)
{
$VALID_COUPONS[$c['code']] = $c['percent'];
}
$salutations = array();
$rsetSalutations = query('SELECT * FROM salutations ORDER BY salutation_id ASC');
while(($c = mysql_fetch_assoc($rsetSalutations)) !== false)
{
$salutations[] = $c['salutation'];
}
$BASE_PRICE_QTY = array();
$UPGRADE_PRICE = array();
$rsetPrices = query('SELECT * FROM cart_prices ORDER BY qty ASC');
while(($c = mysql_fetch_assoc($rsetPrices)) !== false)
{
$BASE_PRICE_QTY[] = $c['unit_price'];
$UPGRADE_PRICE[] = $c['upgrade_price'];
}
function insert($hash, $table)
{
$fields = implode(',', array_keys($hash));
$values = implode('","', $hash);
$query = sprintf('INSERT INTO %s (%s) VALUES("%s")', $table, $fields, $values);
query($query);
}
function query($query)
{
return @mysql_query($query);
}
function queryFetch($query)
{
return @mysql_fetch_assoc(query($query));
}
function p($key, $default = '')
{
if (isset($_POST[$key]))
{
return $_POST[$key];
}
else
{
return $default;
}
}
function g($key, $default = '')
{
if (isset($_GET[$key]))
{
return $_GET[$key];
}
else
{
return $default;
}
}
答案 0 :(得分:3)
$ rsetCoupons在执行时不是mysql查询资源。您的查询失败,或者变量在某处丢失。
http://php.net/mysql_fetch_assoc
我很确定你的查询失败了。你应该检查mysql_query的返回,如果它是false,那么检查mysql_error()。
此外,您不应该禁止mysql_connect和mysql_select_db调用中的错误。如果无法建立数据库连接,那么您应该更好地处理它,而不是让您的页面进行操作,并在每次后续的mysql调用时出错。这可能实际上是你的错误。如果您要阻止错误将其隐藏起来,那么面向公众的PHP站点应该将display_errors设置为off,但您仍应记录错误。
答案 1 :(得分:0)
这个答案意味着(通常)您的QUERY语法错误。
在这种情况下,您使用$rsetCoupons = query('SELECT * FROM coupons ORDER BY coupon_id ASC');
然后使用mysql函数,请改用mysql_query
!