xPDO::query - выполняет SQL-запрос, и возвращает PDOStatement обьект.
Это может быть удобным способом для получения запросов, без необходимости беспокоится о сложном синтаксисе, который требует xPDO.
<?php
xPDOObject|false query (string $statement)
$statement:
Строка SQL запроса, параметры в запросе, должны быть надлежащим образом экранированы.
Выбрать простую запись
Вот простой пример запроса для получения одной записи баз данных. Обычно для этого используются getObject и getCollection.
<?php
$result = $modx->query("SELECT * FROM modx_users WHERE id=1");
if (!is_object($result)) {
return 'Нет результата!';
}
else {
$row = $result->fetch(PDO::FETCH_ASSOC);
return 'Результат:' .print_r($row,true);
}
Используйте PDO::FETCH_ASSOC для получения результата в виде ассоциативного массива:
<?php
Array
(
[id] => 1
[username] => my_user
[password] => xxxxxxxxxxxxxxxxxxx
// ...
)
Без него результат представляет из себя смесь ассоциативного массива и обычный массив.:
<?php
Array
(
[id] => 1
[0] => 1
[username] => my_user
[1] => my_user
[password] => xxxxxxxxxxxxxxxxxxxxxxx
[2] => xxxxxxxxxxxxxxxxxxxxx
// ...
)
Выбор нескольких записей
PDO использует ленивый загрузчик, так что вы не сможете получить все результаты сразу. Для этого нужно перебирать каждый результат в цикле.
<?php
$results = $xpdo->query("SELECT * FROM some_table");
while ($r = $results->fetch(PDO::FETCH_ASSOC)) {
print_r($r); exit;
}
Цитирование входящих данных
Для цитирования входящих данных используется $modx->quote.
<?php
$username = $modx->quote($username);
$sql = "SELECT * FROM modx_users WHERE username = $username";
$result = $modx->query($sql);
$row = $result->fetch(PDO::FETCH_ASSOC);
return print_r($row,true);
Функция [quote] имеет и второй аргумент, который используется для типа входящих данных
<?php
$id = $modx->quote(1, PDO::PARAM_INT);
$sql = "SELECT * FROM cms_users WHERE id = $id";
$result = $modx->query($sql);
$row = $result->fetch(PDO::FETCH_ASSOC);
return print_r($row, true);
Выбираем коллекцию
Вот еще один пример для выборки нескольких полей из базы данных MODX.
<?php
$output = '';
$sql = "SELECT * FROM modx_users";
foreach ($modx->query($sql) as $row) {
$output .= $row['username'] .'
';
}
return $output;
Вы можете использовать метод fetchAll() для возрата асоциативного массива:
<?php
$output = '';
$sql = "SELECT * FROM modx_users";
$result = $modx->query($sql);
$data = $result->fetchAll(PDO::FETCH_ASSOC);
return $data;
Fetch стили
From http://php.net/manual/en/pdostatement.fetch.php, доступны следующие константы которые влияют на резутьтат ответа: