Поддержка Проблемы и решения Вторая база данных

  • здравствуйте, подскажите пожалуйста, как мне обратиться к внешней базе данных (не вордпресовской), плагины типа hyperdb — не вариант, поскольку основная вордпресовская база PostgreSQL, а этот[hyperdb] плагин конфликтует с тем, который обучает wordpress работе с PostgreSQL. Прямое обращение к сторонней базе тоже не помогает, при этом теряется соединение с основной базой.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно создать новое соединение, которое не будет зависеть от текущего:
    http://php.net/manual/ru/function.mysql-connect.php
    http://php.net/manual/ru/function.pg-connect.php

    я именно это и называл прямым обращением, после того как я вызываю функцию, которая соединяется со сторонней базой данных, извлекает всю интересующую меня информацию и закрывает соединение, вордпресс начинает ругаться на отсутствие соединения с базой данных… если не закрывать соединение, то тоже ничего толкового не выходит.
    вызываемая функция выглядит примерно так:

    <?php
    function device_exists($sn, $imei)
    {
    	$web = pg_connect("host=localhost dbname=web user=user password=password");
    	if (!$web) {
    			echo "<center>Произошла ошибка при соединении с базой web.Попробуйте зарегистрироваться еще раз.<br>";
    			echo "<input type='button' value='Вернутся к редактированию данных' onClick='history.go(-1)'></center>";
    			exit;
    	}
    	$device_test = pg_query($web,'SELECT imei, sn, regstr FROM web.device');
    	if (!$device_test) {
    		echo "<center>Произошла ошибка при обращении к списку устройств. Попробуйте зарегистрироваться еще раз.<br>";
    		echo "<input type='button' value='Вернутся к редактированию данных' onClick='history.go(-1)'></center>";
    		exit;
    	}
    	$device_sn = 0;
    	$device_imei = 0;
    	$device_reg = 0;
    
    	while ($row = pg_fetch_array($device_test))
    	{
    		if(strcmp(strtolower($row['sn']), strtolower($sn))==0)
    		{
    			$device_sn = 1;
    			if(strcmp(strtolower($row['imei']) , strtolower($imei))==0)
    			{
    				$device_imei = 1;
    				if(strcmp(strtolower($row['regstr']), 'f')== 0 )
    				{
    					$device_reg = 1;
    				}
    			}
    		}
    	}
    	pg_close($web);
    
    	if($device_reg == 1){
    		return false;
    	}else
    		return true;
    }
    ?>

    Модератор Yuri

    (@yube)

    С mysql этот номер проходит на ура. Думаю, разница в поведении связана с тем, что Создатели WP позаботились о том, чтобы в каждой функции mysql_* был явно указан хэндлер открытой базы, а авторы плагина, «который обучает wordpress работе с PostgreSQL«, используют базу «по умолчанию», то бишь последнюю подключенную.

    Спасибо) А вы не могли бы подсказать плагин, «который обучает wordpress работе с PostgreSQL», в котором все будет прописано нормально? или нужно перекапывать все файлы pg4wp, и прописывать вручную?

    Модератор Yuri

    (@yube)

    Не мог бы — просто не знаю. Учитывая, сколько плагинов написано из расчета использования mysql, я бы вообще не рискнул использовать pgsql.

    Не думаю, что файлов для перекапывания сильно много. А в правке нуждается, скорее всего, вообще один.

    спасибо еще раз. попробую исправить плагин. я бы тоже не стал использовать PostgreSQL, но это, к сожалению, входило в задание.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Вторая база данных» закрыта для новых ответов.