silen@silen.net
bokkie@nl.linux.org
In dit document wordt beschreven hoe een verbinding te maken met een MS SQL 6.x+ databaseserver via ODBC functies van PHP3 (3.0.1x of hoger) gecompileerd met Openlink drivers onder Linux.
In de Unix wereld hebben de mensen vaak liever niets te maken met M$ gerelateerde software. In de echte wereld kan je werkgever echter van je verlangen data in een MS SQL database onder NT op te slaan en webtoepassingen onder Linux uit te voeren. Wat te doen? Ontslag nemen of de tijd nemen om dit document te lezen? Als je voor het laatste kiest, beloof ik je een gedetailleerde leidraad, zodat je die baan nog een tijdje aan kunt houden. Het is een Hoe-te-doen leidraad, geen Waarom-zo leidraad. Dus vraag me niet waarom het abc moet zijn en niet cba. Dat weet ik ook niet.
PHP wordt onder webprogrammeurs steeds populairder, hoofdzakelijk omdat het zo kan worden geconfigureerd dat het met diverse databases zoals Oracle, MySQL, Solid enzovoort een verbinding tot stand kan brengen. Maar bij een MS SQL server, gaat het om een ander probleem. Alhoewel je PHP's Sybase-ct ondersteuningsfeatures kunt gebruiken om een directe verbinding met MSSQL te maken, geven veel mensen (ik in ieder geval) de voorkeur aan een verbinding via ODBC.
Openlink ODBC middleware aanpassend, kun je gebruik maken van die ODBC_xxxx functies om alle databases te benaderen waar Openlink een driver voor heeft. Je moet hiervoor de Openlink Linux client en Server middleware installeren en PHP opnieuw compileren dat het ODBC functies ondersteunt.
Copyright (c) 1999 door Zili Zhang
Kopieer en distribueer dit document gerust (of geef het weg) in elk gewenst formaat. Je wordt verzocht correcties en/of opmerkingen naar de huidige beheerder door te sturen. Je mag er een afgeleide werk van maken en het distribueren op voorwaarde dat je:
Als je een afgeleid werk overweegt anders dan een vertaling, dan wordt je verzocht je plannen te bespreken met de huidige beheerder.
Dit document wordt je in goed vertrouwen aangeboden aangezien het alleen uit een veilige configuratie en procedures bestaat. Er wordt geen verantwoordelijkheid door de auteur geaccepteerd voor enig verlies of schade op welke wijze dan ook veroorzaakt door een persoon of uitrusting, als een direct of indirect gevolg van het opvolgen van deze instructies.
Dit document werd afgeleid van het gewone tekstbestand te vinden op http://www.silen.net/openlink-php-odbc.txt.
Deze stap is een beetje gecompliceerd. Er zijn zowel op de Linux client als de NT server een aantal werkzaamheden te verrichten.
install.sh
en likoxglc.taz
(voor een libc6 systeem)
of likoxxxx.taz
(voor een libc5 systeem) vanaf
ftp://www.openlinksw.com/. mkdir /usr/local/openlink
install.sh
en likoxglc.taz
naar /usr/local/openlink
cd /usr/local/openlink
sh install.sh
, het install script zal je vragen om de eigenaar
en groep van het programma. Bestanden worden geëxtraheerd naar de
odbcsdk
directory onder /usr/local/openlink
en .odbc.ini
gekopieerd naar de homedirectory van de eigenaar.
ntadm65x.zip
vanuit
ftp://www.openlinksw.com/,
naar je NT-server.unzip ntadm65x.zip
cd disk1
- directory waar je het package decomprimeert.setup
uit en volg de instructies om de Openlink
middleware te installeren.
.odbc.ini
bestand in je homedirectory.udbc.ini
vanuit de bin directory van de Openlink
middleware installatiedirectory naar de
directory /etc
op de client./etc/udbc.ini
aan.
Wijzig in de sectie [dsn_sql6], de Host, Database, UserName
en Password velden overeenkomstig je serverinstellingen.
Hier is een deel van mijn /etc/udbc.ini
:
[dsn_sql6]
Host = 10.0.0.1
ServerType = sql6
;ServerOptions =
Database = pubs
;FetchBufferSize = 30
UserName = sa
Password = xxxxxxx
LD_LIBRARY_PATH='/usr/local/openlink/odbcsdk/lib'
toe en
exporteer deze variabele. Typ onder de csh-shell:
setenv LD_LIBRARY_PATH /usr/local/openlink/odbcsdk/lib
odbctest
cd /usr/local/openlink/odbcsdk/examples
./odbctest
dsn=dsn_sql6
Nu hebben we Openlink en kunnen we verder met de compilatie van PHP. Voor deze versie is PHP 3.0.10 of hoger nodig om het werkend te krijgen.
php-3.0.11.tar.gz
vanaf
http://www.php.net.
gzip -dc php-3.0.11.tar.gz|tar -xof -
cd php-3.0.11
./configure --with-openlink (--with-mysql --with-gd=/usr/local/gd1.3 --enable-track-vars)
NOOT: Mijn configuratie is ingesteld PHP in CGI modus te draaien,
met bovendien ondersteuning voor mysql. Jouw configuratie kan
er anders uitzien.
make --silent
NOTE: Maak je geen zorgen bij eventuele waarschuwingsmeldingen.
make install
Het uitvoerbare bestand php zal in /usr/local/bin
worden
geïnstalleerd. Kopieer voor de uitvoering van php de library bestanden
/usr/local/openlink/odbcsdk/lib
naar /usr/lib
zodat
het makkelijker is voor php om de openlink library's te vinden (ik weet
dat er betere methoden zijn).Raadpleeg alsjeblieft de PHP handleiding voor ODBC functies. Hier is mijn voorbeeldcode odbc.php3: (odbc_num_rows() zal niets retourneren, dus je moet herhaaldelijk odbc_fetch_row() aanroepen om aan het aantal te komen.)
<?
/* een aantal omgevingsvariabelen, plaats een commentaarteken voor een
* van deze regels om te testen of het dan nog werkt
*/
putenv("LD_LIBRARY_PATH=/usr/local/openlink/odbcsdk/lib");
putenv("UDBCINI=/etc/udbc.ini");
putenv("ODBCINI=/root/.odbc.ini");
putenv("DebugFile=/tmp/udbc.out"); // debug trace output
$dsn="DSN=dsn_main"; // noot 'DSN=' is vereist
$user="sa";
$password="xxxxxxx";
$sql="SELECT * FROM titles";
/* directly execute mode */
if ($conn_id=odbc_connect("$dsn",$user,$password)){
echo "connected to DSN: $dsn<br><br>";
if($result_id=odbc_do($conn_id, $sql)) {
echo "executing '$sql'<br><br>";
$num_fields=odbc_num_fields($result_id);
if($num_fields>0){
echo "Number of fields:
$num_fields<br>";
for($i=1;$i<=$num_fields;$i++){
$field_name[$i-1]=odbc_field_name($result_id,$i);
}
$num_rows=0;
while(odbc_fetch_row($result_id)){
for($i=1;$i<=$num_fields;$i++){
$result[$num_rows][$field_name[$i-1]]=odbc_result($result_id,$i);
}
$num_rows++;
}
echo "Number of rows: $num_rows<br>";
}else{
echo "not a field returned. <br><br>";
}
echo "Results:<br>";
for($i=0;$i<sizeof($result);$i++){
while(list($key,$value)=each($result[$i])){
echo "$i:$key=$value<br>";
}
}
echo "freeing result<br><br>";
odbc_free_result($result_id);
}else{
echo "can not execute '$sql'<BR><BR>";
}
echo "closing connection $conn_id";
odbc_close($conn_id);
}else{
echo "can not connect to DSN: $dsn<br><br>";
}
?>
unable to open the service control manager <5>
press RETURN to exit oplrqb
Kun je me alsjeblieft vertellen hoe ik dat probleem kan corrigeren?
Dit zou een probleem met NT zelf kunnen zijn. Probeer het op te lossen
door de computer opnieuw op te starten en start de openlink service
dan vanuit de Control Panel/service manager.