xPDO::query

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] имеет и второй аргумент, который используется для типа входящих данных

  • PDO::PARAM_INT для цитирования чисел
  • PDO::PARAM_STR для цитирования строк (по умолчанию)
<?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, доступны следующие константы которые влияют на резутьтат ответа:

  • PDO::FETCH_ASSOC: возвращает ассоциативный массив индексированный по имени столбца
  • PDO::FETCH_BOTH (по умолчанию): возвращает массив, индексированный именами столбцов результирующего набора, а также их номерами (начиная с 0)
  • PDO::FETCH_BOUND: возвращает TRUE и присваивает значения столбцов результирующего набора переменным PHP, которые были привязаны к этим столбцам методом PDOStatement::bindColumn()
  • PDO::FETCH_CLASS: создает и возвращает объект запрошенного класса, присваивая значения столбцов результирующего набора именованным свойствам класса, и следом вызывает конструктор, если не задан PDO::FETCH_PROPS_LATE. Если fetch_style включает в себя атрибут PDO::FETCH_CLASSTYPE (например, PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE), то имя класса, от которого нужно создать объект, будет взято из первого столбца./li>
  • PDO::FETCH_INTO: обновляет существующий объект запрошенного класса, присваивая значения столбцов результирующего набора именованным свойствам объекта
  • PDO::FETCH_LAZY: комбинирует PDO::FETCH_BOTH и PDO::FETCH_OBJ, создавая новый объект со свойствами, соответствующими именам столбцов результирующего набора
  • PDO::FETCH_NUM: возвращает массив, индексированный номерами столбцов (начиная с 0) /li>
  • PDO::FETCH_OBJ: создает анонимный объект со свойствами, соответствующими именам столбцов результирующего набора
xPDO::addPackage - подключает обьекты нужного пакета…
xPDO::commit - аналог функции php commit()
xPDO::beginTransaction - аналог функции php beginTransaction()
xPDO::connect - создает подключение к базе данных,…
xPDO::fromJSON - преобразует строку JSON в php…
xPDO::getCollection - получаем коллекцию указанного…
xPDO::getCollectionGraph - получаем коллекцию указанного…
xPDO::getObject - получаем один экземпляр обьекта…
xPDO::newQuery - создает новый xPDOQuery для выбранного…
xPDO::getObjectGraph - получает заданный обьект и все…
xPDO::getOption - получаем опцию обьекта по его…
xPDO::getTableName - получает фактическое имя таблицы…
xPDO::loadClass - подключаем выбранный класс.
xPDO::log - добавляем сообщение в лог.
xPDO::newObject - создаем новый обьект класса.
xPDO::newQuery - создаем новый обьект класса.
xPDO::query - выполняет SQL-запрос, и возвращает…
xPDO::setDebug - устанавливает отладчик для XPDO
xPDO::setLogLevel - устанавливает уровень логирования…
xPDO::setLogTarget - Устанавивает цель для xPDO::_log()…
xPDO::setOption - устанавливаем значение для конфигурации.
xPDO::toJSON - конвертирует PHP массив в JSON…