Connettersi a Mssql

Ho problemi a connettermi a MSSQL con PDO.

Ho fatto le prove su Debian Etch, ma installando il pacchetto php5-sybase (This package provides a module for Sybase and Microsoft SQL Server database connections directly from PHP scripts.) non ottengo i risultati sperati.

se provo a conenttermi al DB MSSQL ecco il risultato:

Errore di connessione: could not find driver

se cerco i file *sql.so mi ritrovo solo questi:

/usr/lib/perl5/auto/DBD/mysql/mysql.so
/usr/lib/php5/20060613+lfs/mysql.so
/usr/lib/php5/20060613+lfs/pdo_mysql.so
/usr/lib/php5/20060613+lfs/pdo_pgsql.so
/usr/lib/php5/20060613+lfs/pgsql.so
/usr/lib/postgresql/7.4/lib/plpgsql.so

Allora ho provato ad usare MDB2 per mssql

Ma se faccio:

# pear install MDB2#mssql
Skipping package "pear/MDB2", already installed as version 2.4.1
pear/MDB2_Driver_mssql requires PHP extension "mssql"
No valid packages found
install failed

DEvo forse aggiungere qualche repo?

Ho provato su CentOS ma il risultato per PDO è lo stesso.

Qui però c'è il pacchetto php-mssql ma per PDO la risposta è sempre che non trova il diver.

Lista dei moduli caricati da Apache su CentOS

/usr/lib/php/modules/
[root@centwww modules]# ll
totale 560
-rwxr-xr-x 1 root root  40780 20 set  2007 ldap.so
-rwxr-xr-x 1 root root  48700 27 mar 18:29 mssql.so
-rwxr-xr-x 1 root root 106220 20 set  2007 mysqli.so
-rwxr-xr-x 1 root root  49028 20 set  2007 mysql.so
-rwxr-xr-x 1 root root  23532 20 set  2007 pdo_mysql.so
-rwxr-xr-x 1 root root  23404 20 set  2007 pdo_pgsql.so
-rwxr-xr-x 1 root root  82420 20 set  2007 pdo.so
-rwxr-xr-x 1 root root  19916 20 set  2007 pdo_sqlite.so
-rwxr-xr-x 1 root root  99140 20 set  2007 pgsql.so
-rwxr-xr-x 1 root root  13004 18 nov  2007 phpcups.so

L'RPM php-mssql di CentOS contiene:

Content of RPM :

/etc/php.d/mssql.ini

/usr/lib/php/modules/mssql.so

L'RPM php-mysql di CentOS contiene:

Content of RPM :

/etc/php.d/mysql.ini

/etc/php.d/mysqli.ini

/etc/php.d/pdo_mysql.ini

/usr/lib/php/modules/mysql.so

/usr/lib/php/modules/mysqli.so

/usr/lib/php/modules/pdo_mysql.so

trovato su http://rpm.pbone.net

Quindi suppongo ci debba essere un pdo_mssql.so che non c'è proprio nel pacchetto...

Qui però riesco ad installare MDB2.

Qualcuno sa darmi suggerienti in merito?

inviato 8 anni fa
ilbonzo
X 0 X

Ma intanto sei sicuro che esista un driver per il database Microsoft su una macchina gnu/linux? Penso di sì, ma penso anche che forse è meglo se usi odbc a questo punto.

Per quanto riguarda la tua ricerca tra i driver fisici installati sul server, sappi che quelli sono solo i driver che non sono stati compilati insieme al PHP, in pratica il driver potrebbe essere stato compilato insieme al PHP, per una lista esauriente di ciò che il tuo PHP possa o non possa fare usa sempre la funzione php_info().

Dopo vedi se è il caso di installare tutto il PHP da capo con il driver.

Oppure non è che sbagli i parametri di connessione nella stringa che passi a PDO?

Oppuren on è che più semplicemente non è installato il modulo PDO per interfacciarsi a quel database?

risposto 8 anni fa
Marco Grazia
X 0 X
Ma intanto sei sicuro che esista un driver per il database Microsoft su una macchina gnu/linux? Penso di sì, ma penso anche che forse è meglo se usi odbc a questo punto.

Spero di si... comunque su Centos mi ci collego con MDB2, quindi c'è. Il problema è pdo.

Per quanto riguarda la tua ricerca tra i driver fisici installati sul server, sappi che quelli sono solo i driver che non sono stati compilati insieme al PHP, in pratica il driver potrebbe essere stato compilato insieme al PHP, per una lista esauriente di ciò che il tuo PHP possa o non possa fare usa sempre la funzione php_info().

phpinfo conferma quanto detto.

Su debian niente per mssql

su CentOS ho MSSQL Support ma non PDO_mssql.

Dopo vedi se è il caso di installare tutto il PHP da capo con il driver.

Come faccio? devo compilare io PHP?

Oppure non è che sbagli i parametri di connessione nella stringa che passi a PDO?

Direi di no visto che  come errore mi ritorna che non trova il driver.

Oppuren on è che più semplicemente non è installato il modulo PDO per interfacciarsi a quel database?

Il problema è proprio come installarla su un server Linux.

risposto 8 anni fa
ilbonzo
X 0 X
Ma intanto sei sicuro che esista un driver per il database Microsoft su una macchina gnu/linux? Penso di sì, ma penso anche che forse è meglo se usi odbc a questo punto.

Spero di si... comunque su Centos mi ci collego con MDB2, quindi c'è. Il problema è pdo.

Forse sì e forse no :)

Intanto il driver per Microsoft SQL è PDO_DBLIB che se vuoi scarichi da qui, dalle liste di driver inserite nel tuo primo intervento non lo vedo, quindi non c'è in nessuno dei due sistemi operativi (Debian e CentOS).

Probabilmente però in CentOS hai il supporto per MDB2, prova a seguire questa guida se vuoi installarlo anche in Debian.

Per quanto riguarda la tua ricerca tra i driver fisici installati sul server, sappi che quelli sono solo i driver che non sono stati compilati insieme al PHP, in pratica il driver potrebbe essere stato compilato insieme al PHP, per una lista esauriente di ciò che il tuo PHP possa o non possa fare usa sempre la funzione php_info().

phpinfo conferma quanto detto.

Su debian niente per mssql

su CentOS ho MSSQL Support ma non PDO_mssql.

Dopo vedi se è il caso di installare tutto il PHP da capo con il driver.

Come faccio? devo compilare io PHP?

Teoricamente sì, ovvero, non hai detto a chi appartiene il server e ho desunto che sia tuo o di un'azienda per cui lavori.

Se questo è il tuo caso o comunque puoi mettere mano alla compilazione sul server, sì la strada purtroppo è quella della ricompilazine o del driver specifico o dell'intero PHP.

Devo dire che rileggendo il tuo primo intervento, forse i driver nn sono ricompilati all'interno del PHP, in ogni caso fai presto a capirlo, se all'interno del php.ini nella sezione dei driver questi risultano ancora commentati, anche quelli che sai che già funzionano come il mysql, allora sì i driver sono compilati all'interno del PHP.

In questo caso puoi fare due cose, la prima semplicemente ricompilarti il driver, aggiungerlo nella sezione del php.ini, riavvare il Web Server e fare la prova, se va bene, se no ti toccherà ricompilare tutto il PHP da capo, con tutte le impostazioni che hai ora più il nuovo driver, un casino terribile dato che comunque non è nel pacchetto originale.

Prova a seguire questa guida qui: http://it.php.net/manual/en/install.unix.debian.php è per la versione 4 del PHP ma insomma i meccanismi di compilazione quelli sono. Tieni presente che Debian Etch ancora preferisce la versione 4 per la sicurezza (Bha!).

Oppure non è che sbagli i parametri di connessione nella stringa che passi a PDO?

Direi di no visto che  come errore mi ritorna che non trova il driver.

Oppure non è che più semplicemente non è installato il modulo PDO per interfacciarsi a quel database?

Il problema è proprio come installarla su un server Linux.

E be fai le prove che ti h detto, magari se hai la possibilità di usare una terza macchina per non incasinare tutto, fai sapere piano piano riusciremo pure a sistemarla no?

risposto 8 anni fa
Marco Grazia
X 0 X

Probabilmente però in CentOS hai il supporto per MDB2, prova a

seguire questa guida se vuoi installarlo anche in Debian.

Non va, il problema è che manca il driver per Mssql in debian.

Se questo è il tuo caso o comunque puoi mettere mano alla compilazione sul server, sì la strada purtroppo è quella della ricompilazine o del driver specifico o dell'intero PHP.

Devo dire che rileggendo il tuo primo intervento, forse i driver nn sono ricompilati all'interno del PHP, in ogni caso fai presto a capirlo, se all'interno del php.ini nella sezione dei driver questi risultano ancora commentati, anche quelli che sai che già funzionano come il mysql, allora sì i driver sono compilati all'interno del PHP.

In questo caso puoi fare due cose, la prima semplicemente ricompilarti il driver, aggiungerlo nella sezione del php.ini, riavvare il Web Server e fare la prova, se va bene, se no ti toccherà ricompilare tutto il PHP da capo, con tutte le impostazioni che hai ora più il nuovo driver, un casino terribile dato che comunque non è nel pacchetto originale.

Prova a seguire questa guida qui: http://it.php.net/manual/en/install.unix.debian.php è per la versione 4 del PHP ma insomma i meccanismi di compilazione quelli sono. Tieni presente che Debian Etch ancora preferisce la versione 4 per la sicurezza (Bha!).

I driver per ora sono tutti compilati con PHP, nel PHP.ini non vengono richiamati come estensioni.

Infatti stiamo mettendo su prorpio il passaggio a php5, prima usava PEAR DB che ora è sostituita da MDB2, quindi anche così andrebbe bene. Però visto che con Mysql ero riuscito a usare PDO, volevo fare tutto così.

Direi che la sokuzione per ora è CentOS con PDO_mysql e MDB2 per MsSQL, però una prova a ricompilare il driver in debian la faccio.

E be fai le prove che ti h detto, magari se hai la possibilità di usare una terza macchina per non incasinare tutto, fai sapere piano piano riusciremo pure a sistemarla no?

Le macchine per ora sono virtuali in fase di test, quindi dci faccio quello che voglio... e lo so fare. ;)

Ora però non so da dove partire per ricompilare il driver...

Quello per PDO_mssql mi hai trovato il link, per mssql e basta (basterebbe per installare MDB2) dove lo pesco....

su PHP.net mi dice che i driver per mssql sono in freetds

http://www.freetds.org/software.html

ho installato freetds-dev come pacchetto, ma poi?

Grazie mille.

risposto 8 anni fa
ilbonzo
modificato 8 anni fa
X 0 X

Ma ti avevo dato il link a PDO per MySQL, i driver sono una cosa un po' diversa vediamo...

Questa è la pagina su Microsoft dove scaricare i driver JDBC per connettersi a MS SQL, e li da per diversi sistemi operativi, certo non sono rilasciati con licenza GPL.

Se la licenza è importante prova anche questo: http://jtds.sourceforge.net/

Poi... il driver PDO per MS SQL te l'avevo già dato, si chiama PDO_DBLIB

In ogni caso prova a Googolare da qui: http://www.google.it/linux?hl=it&q=driver+per+mssql&btnG=Cerca&meta=

risposto 8 anni fa
Marco Grazia
X 0 X

Ok, forse ho fatto un po' di confusione.

Metto in ordine gli obbiettivi:

Usare Debian se possibile, il vecchi server era Debian e non vorrei cambiare le cose.

Installare Mdb2

# pear install MDB2#mssql
Skipping package "pear/MDB2", already installed as version 2.4.1
pear/MDB2_Driver_mssql requires PHP extension "mssql"
No valid packages found
install failed

Quindi devo mettere l'estensione per mssql.

Se riesco così basterebbe, ma poi vorrei fare una prova a mettere PDO.

Se non riesco a fare nulla allora mi concentro su CentOS in cui essendoci MDB2 sarei già a posto, farei solo un tentativo per PDO_dblib

Quindi primo punto come metto l'estensione mssql su debian?

risposto 8 anni fa
ilbonzo
X 0 X

Grazie, me lo studio un po'

risposto 8 anni fa
ilbonzo
X 0 X

Facci sapere come è andata

risposto 8 anni fa
Marco Grazia
X 0 X

Per ora sto usando MDB2 su Centos..

Ma ho un problema:

for($i=0; $i<$nu; $i++)
    {
        $sql = "SELECT SOGID FROM NOTIFICHE WHERE SOGID = " . $unex[$i]['proprietario'];
        $res = $v->dbms->queryAll($sql);
        
        
        /********************************
         * Funziona solo se è minuscolo anche se il ampo è maiuscolo....
         */       
        echo $res[0]['SOGID'].'<br/>';
        //NON FUNZIONA
        echo $res[0]['sogid'].'<br/>';
        //FUNZIONA
}

Ho il problema che se faccio una query a tabelle con colonne dal nome in maiuscolo, mi ritorna un array con gli indici minuscoli...

Suggerimenti?

risposto 8 anni fa
ilbonzo
X 0 X

Qui la risposta al tuo questio:

http://pear.php.net/manual/en/package.database.mdb2.intro-portability.php

In pratica si tratta di una funzionalità abilitata di default per garantire la portabilità del codice su diversi database, che può essere disabilitata.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Immaginavo ci fosse una cosa del genere, ma non l'avevo trovata.

Grazie mille gianni, sempre puntuale.

risposto 8 anni fa
ilbonzo
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda