2016-02-09 2 views
4

Я пытаюсь подключиться к серверу MSSQL через php, но мое подключение pdo дает мне трудное время и ошибки, которые я действительно не понимаю. Код, который я наклеил ниже, работал отлично, неделю назад, и внезапно он просто остановился, ничего не изменив. Я все еще могу подключиться к серверу и запускать запросы непосредственно из командной строки, но у меня нет такой же удачи в php. Кто-нибудь видит то, что мне не хватает? Я потратил слишком много времени на это уже, и кажется, что я бегу в кругах.PHP DBlib PDO Issue

Во-первых, это ошибка я получаю от моего PDOException

SQLSTATE[] (null) (severity 0) 

часть моего Mssql()

private function __construct() { 
     try{ 
      $this->_pdo = new PDO('dblib:host=' . Config::get('prod/host') . ':'. Config::get('prod/port') .';dbname=' . Config::get('prod/db'),Config::get('prod/username'), Config::get('prod/password')); 
     }catch(PDOException $e){ 
      die($e->getMessage()); 
     } 
    } 

    public static function getInstance(){ 
     // Already an instance of this? Return, if not, create. 
     if (!isset(self::$instance)) { 
      self::$instance = new Mssql(); 
     } 
     return self::$instance; 
    } //...This function is working and directs to __construct() 

Как я называю это

/*Some random php file*/ 
function getClients(){ 
    $conn = Mssql::getInstance(); 
//..... 

И мой init.php

//... 
prod' => array(
     'host'  => 'xxxxxxx', 
     'port'  => '1433', 
     'username' => 'xxxxxxx', 
     'password' => 'xxxxxx', 
     'db'  => 'xxxxxxx' 
    ), 
//..... 
+0

http://stackoverflow.com/questions/19518175/pdoexception -with-message-sqlstate-null-severity-0? –

+0

@YourCommonSense У меня есть правильная строка, так как ребята приняли ответ и все еще не работают. – Geo

+3

Отладка: проблема с PDO? Я бы установил PHP-скрипт с жестким кодированным именем и паролем DSN. Итак, можете ли вы подключиться к любому пользователю в любой базе данных MSSQL с помощью PDO? Если нет, то что-то изменилось с PHP/PDO. Если да, то настройте нового пользователя в соответствующей базе данных и получите это соединение. Затем переустановите настройки для нарушителя/пароля и заработаете? –

ответ

1

Мы изменили с помощью DBLIB к Odbc и код в моем классе изменен следующим образом:

private function __construct() { 
     putenv('ODBCSYSINI=/etc'); 
     putenv('ODBCINI=/etc/odbc.ini'); 
     $username = "xxxx"; 
     $password = "xxxx"; 
     try { 
      $this->_pdo = new PDO("odbc:production","$username","$password"); 
     } catch (PDOException $exception) {     
      die($exception->getMessage()); 
     } 
+0

. Хорошая находка. Просто обратите внимание, [вы никогда не должны ловить ошибки, чтобы сообщить об этом.] (Https://phpdelusions.net/pdo#errors) –

+0

Мы удалили части эха после отправки моего ответа :) – Geo

+0

Также имя пользователя и пароль могут быть передан непосредственно в odbc.ini, насколько я помню – Geo

Смежные вопросы