【问题标题】:When PDO returns an empty object, using PDO::FETCH_OBJ, how do I echo values based upon the empty object?当 PDO 返回一个空对象时,使用 PDO::FETCH_OBJ,我如何根据空对象回显值?
【发布时间】:2014-10-24 17:54:10
【问题描述】:

在我的 PDO 查询中,当没有返回任何结果时,PDO::FETCH_OBJ 没有检索到任何对象(get_class 因非对象而失败,正如预期的那样)。

$prepared_statement = $this->_adapter->prepare($sql);
$prepared_statement->bindValue(':student_id', $_student_search, PDO::PARAM_INT);
$prepared_statement->execute();
$results = $prepared_statement->fetch(PDO::FETCH_OBJ);
if (empty($results))
{
    return echo "EMPTY"; //what do I do?
}

return $results;

由于我的模板是基于对象返回值的,我该怎么办?

//from my code somewhere
//$student is empty
$student = $student_model->findByStudentID($studentID);

<input type="button" value="<?PHP echo $student->lastname; ?>" />
<input type="button" value="<?PHP echo $student->firstname; ?>" />
etc....

当对象为空时,我会收到一个非对象错误,这是有道理的,因为没有返回 $student 对象

$result 为空怎么办? (如果重要,我将 PDO 与 MySQL 一起使用。)

编辑:

我最终这样做了:

if (empty($results))
        {
            $object = new stdClass();
            $realColumnNames = parent::getColumnNames($this->_adapter, 'students');
            foreach($realColumnNames as $column)
            {
                $object->{$column}="";
            }
            return $object;
        }

这里是父类:

protected function getColumnNames($adapter, $myTable)
{
    $this->myAdapter = $adapter;
    $sql = "DESCRIBE " . $myTable; //mysql only
    $prepared_statements = $this->myAdapter->prepare($sql);
    $prepared_statements->execute();
    return $results = $prepared_statements->fetchAll(PDO::FETCH_COLUMN);
}

【问题讨论】:

    标签: php class pdo


    【解决方案1】:

    我不知道这是否是最好的方法,但你可以制作一个空对象......

    if (empty($results)){
        $results = (object) array('lastname' => '', 'firstname' => '');
    }
    

    【讨论】:

    • 我已经考虑过了,但我不是唯一经历过这种情况的人。我认为可能有更好的方法。
    【解决方案2】:

    我最终这样做了:

    if (empty($results))
            {
                $object = new stdClass();
                $realColumnNames = parent::getColumnNames($this->_adapter, 'students');
                foreach($realColumnNames as $column)
                {
                    $object->{$column}="";
                }
                return $object;
            }
    

    这里是父类:

    protected function getColumnNames($adapter, $myTable)
    {
        $this->myAdapter = $adapter;
        $sql = "DESCRIBE " . $myTable; //mysql only
        $prepared_statements = $this->myAdapter->prepare($sql);
        $prepared_statements->execute();
        return $results = $prepared_statements->fetchAll(PDO::FETCH_COLUMN);
    }
    

    【讨论】:

    • 这很好,但是会给您的 mysql 服务器增加额外的负载,如果您发现负载过重的性能问题,请考虑缓存请求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2021-03-31
    • 2014-07-15
    相关资源
    最近更新 更多