1

我有这个返回常量的函数。这是我的类和函数:

class Backlinks extends GoogleSearch {
const ROBOTS_NOINDEX_NOFOLLOW = 606;

    function robotsNoIndexNoFollow(){
    $crawler = new Connection();
    $curl = $crawler -> setUrl($this->url) ->getDocument();
    if ($curl){
        $html = new simple_html_dom($curl);
        $robots = $html -> find("meta[name=robots]", 0);
        $html -> clear();
        unset ($crawler);
        if ($robots){
            $content = $robots -> getAttribute("content");
            $content = strtolower($content);
            if (substr_count($content, "noindex")){
                return ROBOTS_NOINDEX_NOFOLLOW; 
            }
            if (substr_count($content, "nofollow")){
                return ROBOTS_NOINDEX_NOFOLLOW;
            }
        }
        else{
            return false;
        }
    }

}

上面的问题出在 ROBOTS_NOINDEX_NOFOLLOW contatnt 中。该常数作为要在数据库中更新的错误参数进入另一个函数。

public function setStatus($error){
    $status = $error;
    if (!$error){
        $status = 200;
    }
    // only update the pages which weren't already scanned (for historic purposes).
    $query = "UPDATE task_pages tp 
        SET scan_status = $status 
        WHERE page_id = $this->pageID AND scan_status = 0";
    mysql_query($query) or die(mysql_error());
}

我收到两个错误:

注意:使用未定义的常量 ROBOTS_NOINDEX_NOFOLLOW - 在 C:\Program Files (x86)\Zend\Apache2\htdocs\backlinks\cron\Backlinks.php 中假设为 'ROBOTS_NOINDEX_NOFOLLOW' 第 78 行 'field list' 中的未知列 'ROBOTS_NOINDEX_NOFOLLOW'

一个是未定义常量的问题..我不明白为什么。第二个问题是 sql.. 将常量解释为列?!?

为什么以及如何纠正?

4

2 回答 2

3

您需要在字符串周围使用 qoutes,以便 MySQL 将其识别为数据而不是常量。尝试:

"UPDATE task_pages tp 
        SET scan_status = '$status' 
        WHERE page_id = $this->pageID AND scan_status = 0";
于 2012-04-23T07:20:42.303 回答
2

您需要使用 'self' 来引用常量:

返回自我::ROBOTS_NOINDEX_NOFOLLOW

否则,即使在您的情况下这是一个类常量,PHP 也会尝试在全局范围内查找常量。

于 2012-04-23T07:22:05.293 回答