【问题标题】:PHP OOP query returns either blank or ArrayPHP OOP 查询返回空白或数组
【发布时间】:2017-01-09 22:45:43
【问题描述】:

OOP 新手。

尝试在数据库中查询特定行。 数据库结构如下: id - 标题 - 值

(我正在尝试查询匹配标题并获取后续值)

查询结果要么是 Array,要么是空白。

确定我的格式在某处混淆或不正确。谁能发现我做错了什么?

查询(在调用它的同一模型内)catalog/model/order.php

public function getTemplate($title) {
    $query = $this->db->query("SELECT * FROM km_mail_templates WHERE `title` = '" . $this->db->escape($title) . "'");

    foreach ($query->rows as $result) {
            $template_data[$result['title']] = $result['value'];
    }

    return $template_data;
}

我试图调用的变量:

public function index() {//called from within order.php model
  $this->getTemplate()['new_greeting'];
}

也试过了:

$this->model_catalog_order->getTemplate()['new_greeting'];

$this->model_catalog_order->getTemplate('new_greeting');

【问题讨论】:

    标签: php mysql oop


    【解决方案1】:

    如果查询没有找到任何内容,foreach() 主体将永远不会被执行,因此您永远不会初始化 $template_data,并且您将返回 null。您需要在循环之前将其初始化为数组。

    而且由于每次循环都只是覆盖相同的数组元素,因此循环没有意义,只需从数组中获取一个元素。

    似乎不需要返回数组,只需将查询检索到的值作为字符串返回即可。

    public function getTemplate($title) {
        $query = $this->db->query("SELECT * FROM km_mail_templates WHERE `title` = '" . $this->db->escape($title) . "'");
    
        if (!empty($query->rows)) {
            return $query->rows['value'];
        } else {
            return '';
        }
    }
    

    然后你会这样使用它:

    $greeting = $this->getTemplate('new_greeting');
    

    【讨论】:

    • 谢谢!我将代码修改为上述代码,但我仍然必须在 index():PHP Fatal error: Call to a member function getTemplate() on null in.. 和行:$this->model_catalog_order->getTemplate()['new_greeting'] 中错误地调用它(我尝试过的其他变体在我的原始帖子中)
    • 如果查询没有返回任何内容,它不会将任何内容放入$template_data,那么您希望从new_greeting 元素中得到什么?
    • 另外,你为什么不给getTemplate()一个论据?它期望标题作为参数进行搜索。
    • 'new_greeting' 是我试图用 $title 查询的内容。 $this->model_catalog_order->getTemplate('new_greeting') 产生相同的错误。在数据库中,标题行,new_greeting 列 = 测试。 (“测试”是我试图回应的内容).. 抱歉,如果我没有正确解释。
    • 感谢 TON 的帮助和清晰的解释。我现在明白我做错了什么并让它工作了!
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2016-06-29
    • 2023-04-03
    相关资源
    最近更新 更多