dpzff20644 2018-10-11 01:11
浏览 29

public函数返回NULL而不是数组

I am trying to write a thin wrapper around pdo mysql, but I am running into an issue where a public function is returning null instead of the expected array of associative arrays. Is this a problem with pass by value/reference? My initial thought was this was a reference or public issue, but the trivial example works.

<?php
class PDOMysqlAdapter {
  public $db;
  public $result;
  public $test = array(1,2);

  public function get(){
    return $this->test;
  }

  public function __construct($host, $port, $dbname, $username, $password, $charset = "utf8") {
    $this->db = new PDO(
      "mysql:host={$host};port={$port};dbname={$dbname};charset={$charset}",
      $username,
      $password
    );
    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  }

  public function singleton($sql, $debug = false) {
    if($debug) { error_log("Executing:

{$sql}
"); }

    try {
      $this->result = $this->db->query($sql)->fetch(PDO::FETCH_ASSOC);
      if($debug) { error_log(print_r($this->result, true)); }
      return $this->result;
    } catch(PDOException $ex) {
      error_log($ex->getMessage()."
");
      return NULL;
    }
  }

  public function multiple($sql, $debug = false) {
    if($debug) { error_log("Executing:

{$sql}
"); }

    try {
      $this->result = $this->db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
      if($debug) { error_log(print_r($this->result, true)); }
      error_log(count($this->result));
      return $this->result;
    } catch(PDOException $ex) {
      error_log($ex->getMessage()."
");
      return NULL;
    }
  }
}

$db = new PDOMysqlAdapter(DB_SERVER, DB_PORT, DB_NAME, DB_USER, DB_PASS);

error_log(print_r($db->get(), true)); // does what I think it should

$result = $db->singleton("SELECT 1", true);
error_log(print_r($result, true));  // return { '1' => '1' }

$foo = $db->multiple("SELECT * FROM users LIMIT 2", true); // query returns without error and result exists within scope
error_log(print_r($foo, true));  // null
error_log(count($db->result));   // variable is public and full of expected contents

Why is $foo NULL here? $db->result contains the things that I expect to be returned into $foo.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 potsgresql15备份问题
    • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
    • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
    • ¥60 pb数据库修改与连接
    • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
    • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
    • ¥20 神经网络Sequential name=sequential, built=False
    • ¥16 Qphython 用xlrd读取excel报错
    • ¥15 单片机学习顺序问题!!
    • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上