Php $GLOBAL在对成员函数的数组调用中设置表

Php $GLOBAL在对成员函数的数组调用中设置表,php,mysql,pdo,global-variables,fetchall,Php,Mysql,Pdo,Global Variables,Fetchall,好的,我正在使用GLOBALS在我的整个站点中设置一些设置 $tmp = $GLOBALS['_ODB']->query("SELECT * FROM `options`"); $GLOBALS['options'] = NameToTop($tmp->fetchAll(PDO::FETCH_ASSOC)); 我将此作为查询,然后使用此函数将返回的数据放入数组中 所以我可以使用$GLOBALS['settings']['setting1']来调用它 这是设置表,我不明白为什么会出错

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

$tmp = $GLOBALS['_ODB']->query("SELECT * FROM `options`");
$GLOBALS['options'] = NameToTop($tmp->fetchAll(PDO::FETCH_ASSOC));
我将此作为查询,然后使用此函数将返回的数据放入数组中

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

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

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

您希望$tmp是PDOStatement对象,以便在其上调用fetchAll,但事实并非如此,因此您将看到错误消息

PDO::查询在失败时返回false,所以这很可能就是发生的情况

谈论查询的返回值:

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

使用以下命令使其引发异常:

$dbh->setAttributePDO::ATTR_ERRMODE,PDO::ERRMODE_异常

你需要仔细阅读。大多数人确实倾向于走例外路线

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

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中的错误处理,我还不熟悉这个,我应该真正开始。感谢您的帮助,发现我没有正确选择连接中的DB,忘记了mysql:host后面的=符号
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();
}