Прямой запрос в базу. Как?

Помогите переписать запрос с xpdo на прямой запрос в базу.
Есть запрос черех xpdo, но нужно сделать запрос именно прямым. Заранее спасибо!
<?php
$ans00 = htmlspecialchars($_GET["ans"]);
$stat00 = htmlspecialchars($_GET["stat"]);
$idc00 = htmlspecialchars($_GET["idc"]);
$idp00 = htmlspecialchars($_GET["idp"]);
$idu00 = htmlspecialchars($_GET["idu"]);
$idpr00 = htmlspecialchars($_GET["idpr"]);
$idcp00 = htmlspecialchars($_GET["idcp"]);
$idc01 = ($idc00+6)*8;
$idp01 = ($idp00+6)*8;
$idpr02 = $idpr00+6)*8;

                        // Если есть ообъект modUserProfile то: обновляем (таблица modx_user_attributes)
if($item = $modx->getObject('modUserProfile', array('internalKey' => $idu00)))
{
   $item->set('card', $idc01);
      $item->set('cardphone', $idp01);
            $item->set('cardcode002', $stat00);

}
                        // сохраняем
$item->save();

                        // Если есть ообъект cUserFieldsUserPercent то: обновляем (таблица modx_cuserfields_user_percent)
if($item = $modx->getObject('cUserFieldsUserPercent', array('user_id' => $idu00)))
{
   $item->set('percent', $idpr02);
}                       // Иначе создаем новый
    elseif($item = $modx->newObject('cUserFieldsUserPercent', array('user_id' => $idu00)))
{
   $item->set('percent', $idpr02);
}
                        // сохраняем
$item->save();

а нужно так:

<?php
$ans00 = htmlspecialchars($_GET["ans"]);
$stat00 = htmlspecialchars($_GET["stat"]);
$idc00 = htmlspecialchars($_GET["idc"]);
$idp00 = htmlspecialchars($_GET["idp"]);
$idu00 = htmlspecialchars($_GET["idu"]);
$idpr00 = htmlspecialchars($_GET["idpr"]);
$idcp00 = htmlspecialchars($_GET["idcp"]);
$idc01 = ($idc00+6)*8;
$idp01 = ($idp00+6)*8;
$idpr02 = $idpr00+6)*8;

$host='localhost';
$database='имябазы';
$user='пользователь';
$pswd='пароль';
 
$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_select_db($database) or die("Не могу подключиться к базе.");
//тут код прямого запроса.
unixk0d
05 декабря 2016, 10:05
modx.pro
3
6 620
0

Комментарии: 7

unixk0d
05 декабря 2016, 15:06
0
для вывода из базы данных я использую такую конструкцию:
$query = "SELECT email FROM `modx_user_attributes` where internalKey=8534";
$res =  mysql_query($query);
$row = mysql_fetch_row($res);
echo "мэил:  ".$row[0]."\n";
то есть: для internalKey=8534 вывести данные поля email из таблицы modx_user_attributes
теперь мне нужно перезаписать в поле email данные (к примеру xx@xx.xx) для internalKey=8534 в строку modx_user_attributes, а если ее нет то создать всю строку.
    Роман Садоян
    05 декабря 2016, 16:31
    1
    +3
    Не надо делать лишний коннект к БД, у нас уже есть один, делай так:

    $sql ='твой прямой запрос в базу';
    $q = $modx->prepare($sql);
    $q->execute();
    $result = $q->fetchAll(PDO::FETCH_ASSOC);
    В результате получаем массив строк
      unixk0d
      05 декабря 2016, 16:43
      0
      Я бы и рад, но у меня проблема — с тем что железяка описанная мной (здесь modx.pro/help/10508/ ) при обращении к не существующим файлам (ресурсу со сниппетом) получает редерект 301. Также интересно о проблемах связанных с лишним коннектом к базе данных.
        Роман Садоян
        05 декабря 2016, 16:57
        +1
        Я бы и рад, но у меня проблема — с тем что железяка описанная мной (здесь modx.pro/help/10508/ ) при обращении к не существующим файлам (ресурсу со сниппетом) получает редерект 301.
        и?
        Код не работает?
      but1head
      05 декабря 2016, 21:29
      11
      +5
      Я такими штуками пользуюсь, мб поможет

      // 'modx_table_name', array('row1' => 1, 'row2' =>2)
      	function _INSERT($table, $data){
      		$keys = array_keys($data);
      		$fields = '`' . implode('`,`', $keys) . '`';
      		$placeholders = substr(str_repeat('?,', count($keys)), 0, -1);
      		$sql = "INSERT INTO {$table} ({$fields}) VALUES ({$placeholders});";
      		if(!$this->modx->prepare($sql)->execute(array_values($data))){
      			$this->modx->log(1, print_r($sql, true));
      		}
      	}
      
      	// 'modx_table_name', array('row1' => 1, 'row2' => 2), 'id', 1
      	function _UPDATE($table, $data, $key, $val){
      		if(!$key || !$val) return false;
      		$placeholders = array();
      		foreach(array_keys($data) as $k) $placeholders[] = "`{$k}` =?";
      		$placeholders = implode(', ', $placeholders);
      		$data = array_values($data);
      		array_push($data,$val);
      		$sql = "UPDATE {$table} SET {$placeholders} WHERE `{$key}` =?;";
      		if(!$this->modx->prepare($sql)->execute($data)){
      			$this->modx->log(1, print_r($sql, true));
      		}
      	}
        Илья Уткин
        06 декабря 2016, 08:09
        +1
        О, классненько… Украду-ка я это к себе…
          Василий Наумкин
          06 декабря 2016, 09:15
          1
          +5
          if(!$this->modx->prepare($sql)->execute($data)){
          	$this->modx->log(1, print_r($sql, true));
          }
          лучше заменить на
          $stmt = $this->modx->prepare($sql);
          if (!$stmt->execute($data)) {
          	$this->modx->log(1, print_r($stmt->errorInfo, true) . ' SQL: ' . $sql);
          }
          Тогда в логе будет конкретный текст ошибки.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7