1

さて、サイト全体でいくつかの設定を行うために 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() を呼び出す

4

1 に答える 1

0

$tmpそれを呼び出すために PDOStatement オブジェクトであることを期待していますfetchAll()が、そうではないため、表示されているエラーメッセージが表示されます。

PDO::query()失敗すると false を返すため、これが発生している可能性が最も高いです。

PDO マニュアルのこのコメントでは、次の戻り値について説明していquery()ます。

この関数によるエラーの処理は、属性 PDO::ATTR_ERRMODE によって制御されます。

例外をスローするには、次を使用します。

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

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();
}
于 2014-09-19T13:05:57.500 に答える