выборка данных из внешней БД

настроил соединение с внешней базой данных
теперь надо взять оттуда данные, но я чтото делаю не так… а может и все не так )))))

$query="SELECT Clients FROM STATUSSERV"; 
$count = $modx->exec($query);
print("Clients online: $count");
посоветуйте что нибудь :)
Евгений
06 ноября 2019, 09:16
modx.pro
165
0

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

Володя
06 ноября 2019, 09:41
0
после запроса
print_r($modx->errorInfo());
    Евгений
    06 ноября 2019, 09:56
    0
    Array ( [0] => 42S02 [1] => 1146 [2] => Table 'sitedb.STATUSSERV' doesn't exist )
    как я понимаю он пытается к базе сайта соединиться

    а сделано это так
    $dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset";
    $modx->addConnection($dsn, $username, $password);
    выше указаны данные для внешней базы и коннект с ней есть
      Володя
      06 ноября 2019, 11:12
      0
      ну либо коннекта с бд нет, либо нет такой таблицы…
        Евгений
        06 ноября 2019, 11:22
        0
        коннект то есть но не туда судя по всему :)
        он не к внешней баз обращается с выборкой а к базе сайта
        Володя
        06 ноября 2019, 11:14
        0
        попробуйте как
        function getXPDO($dsn, $user, $password, $prefix = '', $config_options = null, $driver_options = null)
        {
            $config_options = [
                xPDO::OPT_CACHE_PATH   => MODX_CORE_PATH.'cache/',
                xPDO::OPT_TABLE_PREFIX => $prefix,
            ];
            $driver_options = [
                PDO::MYSQL_ATTR_LOCAL_INFILE => true,
                //PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            ];
        
            try {
                /** @var xPDO $xpdo */
                $xpdo = new xPDO($dsn, $user, $password, $config_options, $driver_options);
                if ($xpdo AND is_object($xpdo)) {
                    $xpdo->setLogLevel(xPDO::LOG_LEVEL_ERROR);
                    $xpdo->setLogTarget('HTML');
                    if ($xpdo->connect()) {
                        return $xpdo;
                    }
                }
            } catch (PDOException $e) {
                die('database connection failed: '.$e->getMessage());
            }
        
        
            return false;
        }
        
        $xpdo = getXPDO($dsn, $username, $password);
        
        $query="SELECT Clients FROM STATUSSERV"; 
        $count = $xpdo->exec($query);
        print("Clients online: $count");
        print_r($xpdo->errorInfo());
          Евгений
          06 ноября 2019, 11:49
          0
          так не работает совсем
            Володя
            06 ноября 2019, 13:57
            0
            так какую ошибку то дает?
              Евгений
              06 ноября 2019, 14:46
              0
              500 ^)
                Володя
                07 ноября 2019, 09:14
                0
                скорее всего где то кривой код, смотрите логи сервера
                  Евгений
                  09 ноября 2019, 04:05
                  0
                  xpdoobject.class.php : 240) Error HY000 executing statement: 
                  Array
                  (
                      [0] => HY000
                      [1] => 2014
                      [2] => Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
                  )
                    Володя
                    09 ноября 2019, 11:26
                    0
                    Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
                    попробуйте указать
                    $driver_options = [
                            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
                    ];
                    либо пользовать вместо exec, query -> fetch
                    $stmt = $xpdo->query('SELECT Clients FROM STATUSSERV');
                    if ($stmt) {
                        $row = $stmt->fetch(PDO::FETCH_ASSOC);
                        $stmt->closeCursor();
                        print_r($row);
                    }
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      11