【问题标题】:PHP - return NULL if no value of FETCH_ASSOC? [duplicate]PHP - 如果没有 FETCH_ASSOC 值,则返回 NULL? [复制]
【发布时间】:2020-05-19 06:32:27
【问题描述】:

我的函数从 MySQL 查询返回一个数组,如果 MySQL 没有返回结果,返回 NULL 是否好?谢谢

class User
{
    /* ... */

    /**
    * Return user info for specified user id
    * @param int $user_id
    * @return array $user
    */
    public function getUser(int $user_id): ?array {

        $query = $this->_db->prepare('SELECT * FROM users WHERE id = :user_id LIMIT 1');
        $query->execute(array(':user_id' => $user_id));

        $user = $query->fetch(PDO::FETCH_ASSOC);

        if ( is_array($user) && !empty($user) ) {

            return $user;
        }

        return null;
    }

    /* ... */
}

更新:看完上面的链接,最后我会这样做。

class User
{
    /* ... */

    /**
    * Return user info for specified user id
    * @param int $user_id
    * @return array $user
    */
    public function getUser(int $user_id): array {

        $user = array();

        $query = $this->_db->prepare('SELECT * FROM users WHERE id = :user_id LIMIT 1');
        $query->execute(array(':user_id' => $user_id));

        $result = $query->fetch(PDO::FETCH_ASSOC);

        if ( is_array($result) && !empty($result) ) {

          foreach( $result as $key => $value ) {

             $user[$key] =  $value;
          }
        }

        return $user;
    }

    /* ... */
}

【问题讨论】:

  • 不确定是否有(单一)好的方法可以做到这一点(尽管有不好的方法)。有些人更喜欢返回 false,在类中的方法的情况下,设置类中的字段而不是将数据返回给调用者会更常见。
  • 正如@NigelRen 所说,将结果设置为类属性并从外部访问它们更为常见。你可以有一个属性public $user;,当你初始化一个类的对象时,你可以很容易地调用方法,然后访问属性$user
  • 一次最多只能返回一个用户;返回一个用户的数组似乎非常奇怪。

标签: php class


【解决方案1】:

是的,我认为这很好。我可能会做类似的事情。然后在使用它进行编码时,您可以执行类似

的操作
if (getUser())
{
 //code assumes user exists 
}

【讨论】:

  • 我也很确定如果没有返回,那么 fetch 会返回 false。测试一下,但你也许可以将下半部分简化为 if $user return true else return null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多