【问题标题】:$GLOBAL Setting a table in array Call to member function$GLOBAL 在数组中设置表 调用成员函数
【发布时间】:2014-09-19 12:49:12
【问题描述】:

好的,我正在使用 GLOBALS 在我的整个网站中设置一些设置

$tmp = $GLOBALS['_ODB']->query("SELECT * FROM `options`");
$GLOBALS['options'] = NameToTop($tmp->fetchAll(PDO::FETCH_ASSOC));

我有这个作为我的查询,然后我使用这个函数将返回的数据放入一个数组中

所以我可以使用$GLOBALS['settings']['setting1']调用它

 function NameToTop($arr)
{
    $output = array();
    foreach ($arr as $val) {
        $output[$val['name']] = $val['value'];
    }
    return $output;
}

然后这里是设置表,我不明白为什么会出错;我真的需要一些帮助。

CREATE TABLE IF NOT EXISTS `options` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `value` text NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Dumping data for table `options`
--

INSERT INTO `options` (`ID`, `name`, `value`) VALUES
(1, 'setting1', 'Name'),
(2, 'email', 'webmaster@gmail.com'),
(3, 'site_title', 'Title of Site'),

我来了

在非对象上调用成员函数 fetchAll()

【问题讨论】:

    标签: php mysql pdo global-variables fetchall


    【解决方案1】:

    您希望 $tmp 成为 PDOStatement 对象,以便在其上调用 fetchAll(),但事实并非如此,因此您会看到错误消息。

    PDO::query() 在失败时返回 false,所以这很可能是正在发生的事情。

    This comment from the PDO manualquery()的返回值:

    此函数对错误的处理由 属性 PDO::ATTR_ERRMODE。

    使用以下方法使其抛出异常:

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    您需要阅读error handling in PDO。大多数人确实倾向于走例外路线。

    这会让你的例子变成这样:

    try {
        $tmp = $GLOBALS['_ODB']->query("SELECT * FROM `options`");
        $GLOBALS['options'] = NameToTop($tmp->fetchAll(PDO::FETCH_ASSOC));
    } catch (PDOException $e) {
        // handle the error in some way
        echo $e->getMessage();
    }
    

    【讨论】:

    • 哦,这个 PDO 中的错误处理,我不熟悉这个,我应该真正开始。感谢您的帮助,发现我没有在连接中正确选择数据库,忘记了mysql:host后的=符号@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2022-11-16
    • 2023-02-06
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多