Nie czuję się az tak dobry w tym momencie abym mógl dokonac takich zmian samemu
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:
<?php
require_once 'Zend/Db/Adapter/Pdo/Abstract.php';
require_once 'Zend/Db/Adapter/Exception.php';
class Zend_Db_Adapter_Pdo_Mssql extends Zend_Db_Adapter_Pdo_Abstract
{
/**
* PDO type.
*
* @var string
*/
protected $_pdoType = 'mssql';
protected
$_numericDataTypes = array( Zend_Db::INT_TYPE => Zend_Db::INT_TYPE,
Zend_Db::BIGINT_TYPE => Zend_Db::BIGINT_TYPE,
Zend_Db::FLOAT_TYPE => Zend_Db::FLOAT_TYPE,
'INT' => Zend_Db::INT_TYPE,
'SMALLINT' => Zend_Db::INT_TYPE,
'TINYINT' => Zend_Db::INT_TYPE,
'BIGINT' => Zend_Db::BIGINT_TYPE,
'DECIMAL' => Zend_Db::FLOAT_TYPE,
'FLOAT' => Zend_Db::FLOAT_TYPE,
'MONEY' => Zend_Db::FLOAT_TYPE,
'NUMERIC' => Zend_Db::FLOAT_TYPE,
'REAL' => Zend_Db::FLOAT_TYPE,
'SMALLMONEY' => Zend_Db::FLOAT_TYPE
);
protected function _dsn()
{
// baseline of DSN parts
$dsn = $this->_config;
// don't pass the username and password in the DSN
unset($dsn['driver_options']);
if (isset($dsn['port'])) { $dsn['host'] .= ',' . $port;
}
// this driver supports multiple DSN prefixes
if (isset($dsn['pdoType'])) { case 'freetds':
case 'sybase':
$this->_pdoType = 'sybase';
break;
case 'mssql':
$this->_pdoType = 'mssql';
break;
case 'dblib':
default:
$this->_pdoType = 'dblib';
break;
}
}
// use all remaining parts in the DSN
foreach ($dsn as $key => $val) {
$dsn[$key] = "$key=$val";
}
$dsn = $this->_pdoType
. ':' . implode(';', $dsn); return $dsn;
}
protected function _connect()
{
if ($this->_connection) {
return;
}
parent::_connect();
$this->_connection->exec('SET QUOTED_IDENTIFIER ON');
}
public function listTables()
{
$sql = "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name";
return $this->fetchCol($sql);
}
public function describeTable($tableName, $schemaName = null)
{
/**
* Discover metadata information about this table.
*/
$sql = "exec sp_columns @table_name = " . $this->quoteIdentifier($tableName, true);
$stmt = $this->query($sql);
$result = $stmt->fetchAll(Zend_Db::FETCH_NUM);
$table_name = 2;
$column_name = 3;
$type_name = 5;
$precision = 6;
$length = 7;
$scale = 8;
$nullable = 10;
$column_def = 12;
$column_position = 16;
$sql = "exec sp_pkeys @table_name = " . $this->quoteIdentifier($tableName, true);
$stmt = $this->query($sql);
$primaryKeysResult = $stmt->fetchAll(Zend_Db::FETCH_NUM);
$pkey_column_name = 3;
$pkey_key_seq = 4;
foreach ($primaryKeysResult as $pkeysRow) {
$primaryKeyColumn[$pkeysRow[$pkey_column_name]] = $pkeysRow[$pkey_key_seq];
}
$p = 1;
foreach ($result as $key => $row) {
$identity = false;
$words = explode(' ', $row[$type_name], 2
); $type = $words[0];
$identity = (bool
) preg_match('/identity/', $words[1
]); }
}
if ($isPrimary) {
$primaryPosition = $primaryKeyColumn[$row[$column_name]];
} else {
$primaryPosition = null;
}
$desc[$this->foldCase($row[$column_name])] = array( 'SCHEMA_NAME' => null, // @todo
'TABLE_NAME' => $this->foldCase($row[$table_name]),
'COLUMN_NAME' => $this->foldCase($row[$column_name]),
'COLUMN_POSITION' => (int) $row[$column_position],
'DATA_TYPE' => $type,
'DEFAULT' => $row[$column_def],
'NULLABLE' => (bool) $row[$nullable],
'LENGTH' => $row[$length],
'SCALE' => $row[$scale],
'PRECISION' => $row[$precision],
'UNSIGNED' => null, // @todo
'PRIMARY' => $isPrimary,
'PRIMARY_POSITION' => $primaryPosition,
'IDENTITY' => $identity
);
}
return $desc;
}
public function limit($sql, $count, $offset = 0)
{
if ($count <= 0) {
throw new Zend_Db_Adapter_Exception("LIMIT argument count=$count is not valid");
}
if ($offset < 0) {
throw new Zend_Db_Adapter_Exception("LIMIT argument offset=$offset is not valid");
}
$orderby = stristr($sql, 'ORDER BY'); if ($orderby !== false) {
$sort = (stripos($orderby, 'desc') !== false) ? 'desc' : 'asc';
$order = str_ireplace('ORDER BY', '', $orderby);
}
$sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $sql);
$sql = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $sql . ') AS inner_tbl';
if ($orderby !== false) {
$sql .= ' ORDER BY ' . $order . ' ';
$sql .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
}
$sql .= ') AS outer_tbl';
if ($orderby !== false) {
$sql .= ' ORDER BY ' . $order . ' ' . $sort;
}
return $sql;
}
public function lastInsertId($tableName = null, $primaryKey = null)
{
$sql = 'SELECT SCOPE_IDENTITY()';
return (int)$this->fetchOne($sql);
}
}
Może ktoś mi to wytłumaczy:
Dlaczego jest tak że z bazą MSSQL mam połączenie a łącze się następująco:
[main_config]
db.adapter = PDO_MSSQL
db.config.host = WIN2008
db.config.username = User1
db.config.password = Password11
db.config.dbname = bdname
controllers.default = ./application/controllers
controllers.somecontroller = ./application/modules/somename/controllers
[db_somename]
db.adapter = PDO_MSSQL
db.config.host = WIN2008
db.config.username = User1
db.config.password = Password11
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.