好的,我正在使用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()
答案 0 :(得分:0)
您希望$tmp
成为PDOStatement对象,以便在其上调用fetchAll()
但不是,因此您会看到错误消息。
PDO::query()
失败时返回false,因此很可能发生了这种情况。
This comment from the PDO manual讨论query()
:
此功能对错误的处理由 属性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();
}