×

Несколько вариантов запроса к базе данных SQL из снипета MODX

Для получения данных из базы данных из своего приложения МОДЕКС можно воспользоваться несколькими способами.

1. Обычный, старый “добрый” метод, запрос из учебников:

$conn = mysql_connect ("localhost", "root", "") or die ("Соединение не установлено!");

mysql_select_db("revodb") or die("База данных не найдена");

$query = "SELECT * FROM modx_item";

$result = mysql_query("SELECT * FROM modx_item where id_doc = '".$id."'");

mysql_close($conn);

while ($line = mysql_fetch_array($result)) {

   echo $line[3];

}

2. Запрос через PDO:

$results = $modx->query("SELECT * FROM modx_users");

while ($r = $results->fetch(PDO::FETCH_ASSOC)) {

        print_r($r); exit;

}

К этому-же, создать свою таблицу в базе данных из модекса можно так:

$result = $modx->exec("CREATE TABLE IF NOT EXISTS `test_table` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `test` char(1) NOT NULL DEFAULT '',

  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ");

print_r ($result);

 

3. Запрос через xPDO, здесь вы прописываете составные части запросы, а метод сам их склеивает и расставляет:

$query = $modx->newQuery(' Box');

// Помните: Синтаксис такой -  имя_класса, ваш псевдоним. Обратите внимание, что фильтры тоже

// используют псевдоним.

$query->innerJoin('Owner','User');

//Здесь Owner – псевдоним, связанный с актуальным пользователем объекта User.

$query->where(array(

    'Owner.name:LIKE' => '%a%',

    'Box.width:>=' => 10,

    'Box.height:!=' => 2,

    'Box.color:IN' => array('red','green','blue'),

));

$query->sortby('Box.name','ASC');

$query->sortby(' Box.height','DESC');

$query->limit(4);

$boxes = $modx ->getCollection(' Box ',$query); //получаем объекты или

$query ->prepare();$query->stmt->execute(); // получим массив

$result = $query->stmt->fetchAll(PDO::FETCH_ASSOC);

 

Чистый where запроса (например):

(

  (      `Person`.`first_name` = 'Bob'

    OR ( `Person`.`last_name` LIKE 'Boblablaw' AND `Person`.`gender` = 'M' )

  )

  AND password IS NOT NULL

)

 

можно переписать так:

$query = $xpdo->newQuery('Person');

$query->where(array(

    array(

        'first_name:=' => 'Bob',

        array(

            'OR:last_name:LIKE' => 'Boblablaw',

            'AND:gender:=' => 'M',

        ),

    ),

    'password:!=' => null,

));

 

// Debugging ( просмотр лога выполнения запроса SQL )

$c = $xpdo->newQuery('Person');

// здеяь добавляете свой фильтр выборки данных...

$c->prepare();

print $c->toSQL(); // или

print_r($c->stmt->errorInfo());

03 ноября 2016, 23:55    Вечерний Минск    2609

Комментарии ()