Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne]Problem ze sterownikiem mssql do PHP 2.5.10, phpinfo nie widzi sterownika
PROGer
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

Ostrzeżenie: (0%)
-----


Witam serdecznie

Sterowniki do PHP w wersji 2.5.10 ściągnałem z tej oto strony:
https://www.microsoft.com/en-us/download/de...s.aspx?id=20098
wybrałem wersje 2.0 dla powyższej wersji PHP.
Po rozpakowaniu paczki sterowników, przegrałem je do katalogu PHP\ext a do pliku php.ini dodałem odpowiednie deklaracje tych plików (dodałem wszystkie)
Po restarcie IIS`a 7.0 (win 2008 serv) i odpaleniu php.info nie widze sterownika mssql którego potrzebuję:
(IMG:http://naforum.zapodaj.net/thumbs/df34444c23c3.png)
Wpadłem więc na pomysl wrzucenia tych bibliotek bezposrednio do system32 katalogu Windowsa, aby ładowac je przy starcie systemu. Tak też zrobiłem i zrestartowałem serwer. Bez zmian, nadal brak sterownika mssql.

Pytanie dlaczego? Jest jakiś inny sposób aby go załadować?

Ten post edytował PROGer 31.07.2015, 12:01:04
Go to the top of the page
+Quote Post
mls
post
Post #2





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ale przecież widać, że sterownik do pdo jest załadowany - sqlsrv.

Wystarczy czytać ze zrozumieniem:
Cytat
The SQLSRV extension provides a procedural interface while the PDO_SQLSRV extension implements PDO for accessing data in all editions of SQL Server 2005 and later (versions 3.2 and 3.1 require SQL Server 2008 and later).


Ten post edytował mls 31.07.2015, 12:02:53
Go to the top of the page
+Quote Post
PROGer
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

Ostrzeżenie: (0%)
-----


Przepraszam, wprowadziłem Was troche w błąd.
Połączenie PDO z baza MSSQL mam i działa dobrze po podpięciu plików z paczki 2.0 z tym, że ja potrzebuję dodatkowo sterownika mssql.dll do obsługi zapytan do bazy w aplikacji.
(IMG:http://naforum.zapodaj.net/thumbs/b4f8080ccda7.png)
Wgrałem taką bibliotekę do katalogu ext i win32. Na Windows server 2003 (SQL server 2005) widać ją poprawnie, ale już na 2008 nie.
Moge prosić o namiar takiej mssql.dll pod SQL 2008?

Ten post edytował PROGer 31.07.2015, 12:21:50
Go to the top of the page
+Quote Post
mls
post
Post #4





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Skoro połączenie z bazą jest i sterownik działa poprawnie, należy zmienić konfigurację połączenia z bazą w aplikacji a nie szukać innego sterownika.
Zend obsługuje również sqlsrv - http://framework.zend.com/apidoc/2.0/names...ver.Sqlsrv.html
Go to the top of the page
+Quote Post
PROGer
post
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

Ostrzeżenie: (0%)
-----


Wersja Zend 1.0.1 z 2005r. również? Aplikacja była pisana tak a nie inaczej. Wiem że z mssql.dll działa poprawnie. Problem z tym że musze ją zmigrować na win serv 2008 wraz z baza MSSQL 2008.

Ten post edytował PROGer 31.07.2015, 12:40:49
Go to the top of the page
+Quote Post
mls
post
Post #6





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jeśli w wersji 1.0.1 nie obsługuje, nie widzę problemu, aby to samemu dodać. Wystarczy poszukać wywołania konstruktora PDO który ma DSN z "mssql" i zamienić na właściwy dla "sqlsrv".
Go to the top of the page
+Quote Post
PROGer
post
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

Ostrzeżenie: (0%)
-----


Nie czuję się az tak dobry w tym momencie abym mógl dokonac takich zmian samemu (IMG:style_emoticons/default/co_jest.gif)
widze tu plik ZEND\DB\Adapter\Pdo\Mssql.php: a tam klasę: class Zend_Db_Adapter_Pdo_Mssql extends Zend_Db_Adapter_Pdo_Abstract ale już widze że nie dam rady tego zmienic:

  1. <?php
  2.  
  3.  
  4.  
  5. require_once 'Zend/Db/Adapter/Pdo/Abstract.php';
  6.  
  7. require_once 'Zend/Db/Adapter/Exception.php';
  8.  
  9. class Zend_Db_Adapter_Pdo_Mssql extends Zend_Db_Adapter_Pdo_Abstract
  10. {
  11. /**
  12.   * PDO type.
  13.   *
  14.   * @var string
  15.   */
  16. protected $_pdoType = 'mssql';
  17.  
  18. protected $_numericDataTypes = array(
  19. Zend_Db::INT_TYPE => Zend_Db::INT_TYPE,
  20. Zend_Db::BIGINT_TYPE => Zend_Db::BIGINT_TYPE,
  21. Zend_Db::FLOAT_TYPE => Zend_Db::FLOAT_TYPE,
  22. 'INT' => Zend_Db::INT_TYPE,
  23. 'SMALLINT' => Zend_Db::INT_TYPE,
  24. 'TINYINT' => Zend_Db::INT_TYPE,
  25. 'BIGINT' => Zend_Db::BIGINT_TYPE,
  26. 'DECIMAL' => Zend_Db::FLOAT_TYPE,
  27. 'FLOAT' => Zend_Db::FLOAT_TYPE,
  28. 'MONEY' => Zend_Db::FLOAT_TYPE,
  29. 'NUMERIC' => Zend_Db::FLOAT_TYPE,
  30. 'REAL' => Zend_Db::FLOAT_TYPE,
  31. 'SMALLMONEY' => Zend_Db::FLOAT_TYPE
  32. );
  33.  
  34.  
  35. protected function _dsn()
  36. {
  37. // baseline of DSN parts
  38. $dsn = $this->_config;
  39.  
  40. // don't pass the username and password in the DSN
  41. unset($dsn['username']);
  42. unset($dsn['password']);
  43. unset($dsn['driver_options']);
  44.  
  45. if (isset($dsn['port'])) {
  46. $dsn['host'] .= ',' . $port;
  47. unset($dsn['port']);
  48. }
  49.  
  50. // this driver supports multiple DSN prefixes
  51. if (isset($dsn['pdoType'])) {
  52. switch (strtolower($dsn['pdoType'])) {
  53. case 'freetds':
  54. case 'sybase':
  55. $this->_pdoType = 'sybase';
  56. break;
  57. case 'mssql':
  58. $this->_pdoType = 'mssql';
  59. break;
  60. case 'dblib':
  61. default:
  62. $this->_pdoType = 'dblib';
  63. break;
  64. }
  65. unset($dsn['pdoType']);
  66. }
  67.  
  68. // use all remaining parts in the DSN
  69. foreach ($dsn as $key => $val) {
  70. $dsn[$key] = "$key=$val";
  71. }
  72.  
  73. $dsn = $this->_pdoType . ':' . implode(';', $dsn);
  74. return $dsn;
  75. }
  76.  
  77. protected function _connect()
  78. {
  79. if ($this->_connection) {
  80. return;
  81. }
  82. parent::_connect();
  83. $this->_connection->exec('SET QUOTED_IDENTIFIER ON');
  84. }
  85.  
  86.  
  87. public function listTables()
  88. {
  89. $sql = "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";
  90. return $this->fetchCol($sql);
  91. }
  92.  
  93. public function describeTable($tableName, $schemaName = null)
  94. {
  95. /**
  96.   * Discover metadata information about this table.
  97.   */
  98. $sql = "exec sp_columns @table_name = " . $this->quoteIdentifier($tableName, true);
  99. $stmt = $this->query($sql);
  100. $result = $stmt->fetchAll(Zend_Db::FETCH_NUM);
  101.  
  102. $table_name = 2;
  103. $column_name = 3;
  104. $type_name = 5;
  105. $precision = 6;
  106. $length = 7;
  107. $scale = 8;
  108. $nullable = 10;
  109. $column_def = 12;
  110. $column_position = 16;
  111.  
  112. $sql = "exec sp_pkeys @table_name = " . $this->quoteIdentifier($tableName, true);
  113. $stmt = $this->query($sql);
  114. $primaryKeysResult = $stmt->fetchAll(Zend_Db::FETCH_NUM);
  115. $pkey_column_name = 3;
  116. $pkey_key_seq = 4;
  117. foreach ($primaryKeysResult as $pkeysRow) {
  118. $primaryKeyColumn[$pkeysRow[$pkey_column_name]] = $pkeysRow[$pkey_key_seq];
  119. }
  120.  
  121. $desc = array();
  122. $p = 1;
  123. foreach ($result as $key => $row) {
  124. $identity = false;
  125. $words = explode(' ', $row[$type_name], 2);
  126. if (isset($words[0])) {
  127. $type = $words[0];
  128. if (isset($words[1])) {
  129. $identity = (bool) preg_match('/identity/', $words[1]);
  130. }
  131. }
  132.  
  133. $isPrimary = array_key_exists($row[$column_name], $primaryKeyColumn);
  134. if ($isPrimary) {
  135. $primaryPosition = $primaryKeyColumn[$row[$column_name]];
  136. } else {
  137. $primaryPosition = null;
  138. }
  139.  
  140. $desc[$this->foldCase($row[$column_name])] = array(
  141. 'SCHEMA_NAME' => null, // @todo
  142. 'TABLE_NAME' => $this->foldCase($row[$table_name]),
  143. 'COLUMN_NAME' => $this->foldCase($row[$column_name]),
  144. 'COLUMN_POSITION' => (int) $row[$column_position],
  145. 'DATA_TYPE' => $type,
  146. 'DEFAULT' => $row[$column_def],
  147. 'NULLABLE' => (bool) $row[$nullable],
  148. 'LENGTH' => $row[$length],
  149. 'SCALE' => $row[$scale],
  150. 'PRECISION' => $row[$precision],
  151. 'UNSIGNED' => null, // @todo
  152. 'PRIMARY' => $isPrimary,
  153. 'PRIMARY_POSITION' => $primaryPosition,
  154. 'IDENTITY' => $identity
  155. );
  156. }
  157. return $desc;
  158. }
  159.  
  160. public function limit($sql, $count, $offset = 0)
  161. {
  162. $count = intval($count);
  163. if ($count <= 0) {
  164. throw new Zend_Db_Adapter_Exception("LIMIT argument count=$count is not valid");
  165. }
  166.  
  167. $offset = intval($offset);
  168. if ($offset < 0) {
  169. throw new Zend_Db_Adapter_Exception("LIMIT argument offset=$offset is not valid");
  170. }
  171.  
  172. $orderby = stristr($sql, 'ORDER BY');
  173. if ($orderby !== false) {
  174. $sort = (stripos($orderby, 'desc') !== false) ? 'desc' : 'asc';
  175. $order = str_ireplace('ORDER BY', '', $orderby);
  176. $order = trim(preg_replace('/ASC|DESC/i', '', $order));
  177. }
  178.  
  179. $sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $sql);
  180.  
  181. $sql = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $sql . ') AS inner_tbl';
  182. if ($orderby !== false) {
  183. $sql .= ' ORDER BY ' . $order . ' ';
  184. $sql .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
  185. }
  186. $sql .= ') AS outer_tbl';
  187. if ($orderby !== false) {
  188. $sql .= ' ORDER BY ' . $order . ' ' . $sort;
  189. }
  190.  
  191. return $sql;
  192. }
  193.  
  194.  
  195. public function lastInsertId($tableName = null, $primaryKey = null)
  196. {
  197. $sql = 'SELECT SCOPE_IDENTITY()';
  198. return (int)$this->fetchOne($sql);
  199. }
  200.  
  201. }




Może ktoś mi to wytłumaczy:
Dlaczego jest tak że z bazą MSSQL mam połączenie a łącze się następująco:
  1. [main_config]
  2. db.adapter = PDO_MSSQL
  3. db.config.host = WIN2008
  4. db.config.username = User1
  5. db.config.password = Password11
  6. db.config.dbname = bdname
  7. controllers.default = ./application/controllers
  8. controllers.somecontroller = ./application/modules/somename/controllers
  9.  
  10. [db_somename]
  11. db.adapter = PDO_MSSQL
  12. db.config.host = WIN2008
  13. db.config.username = User1
  14. db.config.password = Password11
  15. db.config.dbname = dbname


Natomiast jak odpalę aplikację to mam taki oto komunikat:

"The mssql driver is not currently installed"


Dobrze rozumiem że steronik działa poprawnie podczas połączenia z baza, a błednie podczas wykonywania zapytań do niej? Czy też do samego połączenia wykorzystywany jest inny sterownik?

PS: w pierwszym moim poście wkradł się błąd. Chodzi o wersję PHP 5.2.10.

EDIT:

Rozwiązałem problem, to co zrobiłem to odinstalowałem PHP 5.2.10, aby sprawdzić czy sytuacja zmieni się na PHP 5.2.6. <-- nie udało mi się uruchomić tej wersji PHP. Ponownie zainstalowałem PHP w wersji 5.2.10 i sterownik był już widoczny. Czary mary ... nie wiem dlaczego. Jest też inna opcja którą można spróbować jeśli komuś przytrafi się podobny problem. Chodzi o REJESTRACJĘ biblioteki w systemie Widnows przy pomocy polecenia regsvr. Więcej informacji tutaj.

Pozdrawiam serdecznie.

Ten post edytował PROGer 3.08.2015, 13:12:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 17:31