PHP,当没有设置为变量的值时,将变量设置为any

时间:2014-08-20 04:36:21

标签: php pdo

这是搜索值(refone)和paginate的函数:

public function get_all($refone,$per_page,$page_offset) {
        $query = "SELECT * FROM ". self::$table_name . " WHERE rq_detail LIKE :refone";
        $query .= " ORDER BY rq_created DESC";
        $query .= " LIMIT $per_page";
        $query .= " OFFSET $page_offset";
        $sth = $this->conn->prepare($query);
        if(empty($refone)){
            $refone = '';
        } else {
            $refone = "%".$refone."%";
        }

        $sth->bindParam('refone', $refone);
        $sth->execute();
        return $row = $sth -> fetchAll();
    }

现在想法是 refone 如果没有为提到的变量提供值,结果将显示错误:

注意:未定义的索引:第25行的C:\ wamp \ www \ dms \ view \ req \ index.php中的

这里如果你看到这个函数不是空的,它会从开始和结束显示出类似的值但是如果是空的我已经尝试但现在为我工作了。

注意::如果是空白,它应该会产生任何结果。

提前问候。

3 个答案:

答案 0 :(得分:0)

你忘记了这一点。纠正/添加此...

$refone = '$';

答案 1 :(得分:0)

这一行有错误:

$sth->bindParam('refone', $refone);

应该是

$sth->bindParam(':refone', $refone);

:

另外,我会将WHERE子句放在条件:

public function get_all($refone,$per_page,$page_offset) {

    if(!empty($refone)){
        $refone_condition = ' WHERE rq_detail LIKE :refone ';
        $refone = "%".$refone."%";
    } else {
        $refone_condition = ' ';
    }

    $query = "SELECT * FROM ". self::$table_name . $refone_condition;
    $query .= " ORDER BY rq_created DESC";
    $query .= " LIMIT " . intval($per_page);
    $query .= " OFFSET " . intval($page_offset);
    $sth = $this->conn->prepare($query);

    if(!empty($refone)){
      $sth->bindParam(':refone', $refone);
    }

    $sth->execute();
    return $row = $sth -> fetchAll();
}

请注意,我还使用intval()清理了$ per_page和$ page_offset。您也可以像对待它一样绑定它们:refone,这样准备好的语句就会对它们进行清理。

与更通用的代码相同:

public function get_all($refone = NULL, $per_page = NULL, $page_offset = NULL) {

    $args = array();
    $conditions = array();
    $offset_limit_clause = '';

    if(!is_null($refone)){
        $conditions[] = ' rq_detail LIKE ? ';
        $args[] = "%".$refone."%";
    }

    if(!is_null($page_offset)){
        $offset_limit_clause = ' OFFSET ? ';
        $args[] = intval(($page_offset-1) * $per_page); // offset is expressed in pages
                                                      // must convert to records
        if(empty($per_page)) $per_page = 30; // $per_page cannot be 0 if $page_offset > 1
    }

    if(!is_null($per_page)){
        $offset_limit_clause .= ' LIMIT ? ';
        $args[] = $per_page;
    }

    $query = "SELECT * FROM " . self::$table_name . 
    (count($conditions)?" WHERE ":"") . implode(" AND ", $conditions) .
    " ORDER BY rq_created DESC " . $offset_limit_clause;

    $sth = $this->conn->prepare($query);

    $sth->execute($args);
    return $row = $sth -> fetchAll();
}

最后但并非最不重要的是,您可以为函数中的参数设置默认值:

public function get_all($refone = NULL, $per_page = 30, $page_offset = 0) {

如果你没有传递任何东西,将使用默认值,但是如果你传递NULL或空/假值(如0或“”),那些将被接收,所以我不认为这是你在这里寻找的。

答案 2 :(得分:0)

试试这个......

public function get_all($refone,$per_page,$page_offset) {
    $query = "SELECT * FROM ". self::$table_name . " WHERE rq_detail LIKE :refone";
    $query .= " ORDER BY rq_created DESC";
    $query .= " LIMIT $per_page";
    $query .= " OFFSET $page_offset";
    $sth = $this->conn->prepare($query);
    if(empty($refone)){
        $refone = '';
    } else {
        $refone = "%".$refone."%";
    }

    $sth->bindParam(':refone', $refone);
    $sth->execute();
    return $row = $sth -> fetchAll();
}