Я пишу свою собственную оболочку PDO, чтобы сделать мою жизнь проще и безопаснее.
Стандартный запрос выглядит так:
$user = $db->select('users')
->eq('twitter_id', $twitter_id)
->limit(1)
->prepare()
->exec();
Создает этот запрос:
SELECT * FROM users WHERE twitter_id = :twitter_id LIMIT 1
Это прекрасно работает, как я сейчас хочу.Я сталкиваюсь с проблемой, когда у меня есть запрос на возврат нескольких строк.
Мои приложения хранят некоторые динамические настройки, которые я хочу получить и использовать за один проход, и я могу сделать это, выполнив запрос, например:
$share_datas = $db->select('settings', 'setting, value')
->prepare()
->exec();
, который генерирует:
SELECT setting, value FROM settings
, который возвращает:
Array
(
[0] => Array
(
[setting] => since_id
[value] => 17124357332
)
[1] => Array
(
[setting] => last_dm
[value] => 1271237111
)
)
Функция prepare()
собирает части длязапрос и функция exec()
связывают параметры и возвращают массив.
<code> function exec()
{
// echo 'vars: <pre>'.print_r($this->sql_vars, true).'
';$ stmt = $ this-> dbh-> prepare ($ this-> sql_last_query);foreach ($ this-> sql_vars as $ key => $ val) {if ('date_time' === $ key) continue;$ bind = $ stmt-> bindValue ($ key, $ val);} $ stmt-> execute ();$ this-> sql_vars = array ();return $ stmt-> fetchAll (PDO :: FETCH_ASSOC);}
Теперь к вопросу: есть ли способ, которым я могу изменить exec()
или сам запрос так, чтобы он мог возвращать массив, который возвращается, как показано ниже, и избегать любых дополнительных циклов?
Array
(
[since_id] => 17124357332
[last_dm] => 1271237111
)