Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi
PROGer
post
Post #2





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

Posty w temacie


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: 13.10.2025 - 23:07