Я пишу свою собственную обертку 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()
связывает параметрические усилители и возвращает массив.
function exec()
{
// echo 'vars: <pre>'.print_r($this->sql_vars, true).'</pre>';
$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
)
Нет проблем с некоторыми простыми функциями массивов.
$in = $db->exec();
$out = array();
foreach( $in as $row )
$out[ $row['setting'] ] = $row['value'];
Если вам нужна более общая функция, вам придется описать преобразование более четко.
Скорее всего, ответ будет либо:
exec
с другим возвратом поведения, или exec
просто выполнить выполнение и сохранить дескриптор оператора, а затем сделать выборку данных отдельным методом. В дополнение к вашему текущему массиву хэшей мне пригодились следующие удобные методы:
Это все иногда удобные вещи, которые PDO (и большинство других адаптеров баз данных) просто не имеют встроенных флагов для обработки.