mysql_fetch_assoc()期望参数1是资源,给定布尔值

时间:2011-10-09 22:23:28

标签: php sql

我最近在我的主机上升级了我的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;
    }
}

2 个答案:

答案 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