| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 
 | <!doctype linuxdoc system>
<linuxdoc>
<!--
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Changelog:
  v3.0
     Convert to linuxdoc sgml (gferg(at)metalb.unc.edu)
  v2.0b
     A. iODBC is not required to make things work.
     B. No missing *.h files, so do not need to modify unified_odbc.h of PHP.
     C. Example code changes, discarding odbc_num_rows() function.
     D. Explicit announce support for MS SQL 7.0.
     E. FAQ section added.
 -->
<article>
<titlepag>
<title>Verbinden met MS SQL 6.x+ via Openlink/PHP/ODBC mini-HOWTO</title>
<author><name>Zili Zhang, <tt/silen@silen.net/<newline>
Vertaald door: Ellen Bokhorst, <tt>bokkie@nl.linux.org</tt></name></author>
<date>3.0, 15-07-1999</date>
<abstract>
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.
</abstract>
</titlepag>
<!-- Table of contents -->
<toc>
<!-- Begin the document -->
<sect><heading>Introductie</heading>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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. 
<!--
In the end, I made a script sample for reference.
-->
</p>
<sect1><heading>Copyright</heading>
<p>
Copyright (c) 1999 door Zili Zhang
</p>
<p>
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:
</p>
<p>
<itemize>
<item>
Het afgeleide werk (in de meest geschikte vorm, zoals sgml) opstuurt 
naar de LDP (Het Linux Documentatie Project) of vergelijkbaar
zodat het op Internet kan worden geplaatst. Laat de LDP weten waar
het beschikbaar is als het niet de LDP is waar je je document naar
opstuurt.
</item>
<item>
Licentieer het afgeleide werk met dezelfde licentie of gebruik GPL.
Voeg een copyrightmelding in en op z'n minst een verwijzing naar de
gebruikte licentie.
</item>
<item>
Geef krediet aan vorige auteurs en mensen die een belangrijke bijdrage
leverden.
</item>
</itemize>
</p>
<p>
Als je een afgeleid werk overweegt anders dan een vertaling, dan wordt
je verzocht je plannen te bespreken met de huidige beheerder.
</p>
</sect1>
<sect1><heading>Disclaimer</heading>
<p>
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
<url url="http://www.silen.net/openlink-php-odbc.txt"
    name="http://www.silen.net/openlink-php-odbc.txt">.
</p>
</sect1>
</sect>
<sect><heading>Openlink</heading>
<p>
Deze stap is een beetje gecompliceerd. Er zijn zowel op de Linux client
als de NT server een aantal werkzaamheden te verrichten.
</p>
<sect1><heading>Op de client</heading>
<p>
<itemize>
<item>
Download <tt>install.sh</tt> en <tt>likoxglc.taz</tt> (voor een libc6 systeem)
of <tt>likoxxxx.taz</tt> (voor een libc5 systeem) vanaf
<url url="ftp://www.openlinksw.com/" name="ftp://www.openlinksw.com/">. 
</item>
<item><tt>mkdir /usr/local/openlink</tt></item>
<item>Kopieer <tt>install.sh</tt> en <tt>likoxglc.taz</tt> 
naar <tt>/usr/local/openlink</tt>
</item>
<item><tt>cd /usr/local/openlink</tt></item>
<item>
<tt>sh install.sh</tt>, het install script zal je vragen om de eigenaar
en groep van het programma. Bestanden worden geëxtraheerd naar de
<tt>odbcsdk</tt> directory onder <tt>/usr/local/openlink</tt>
en <tt>.odbc.ini</tt> gekopieerd naar de homedirectory van de eigenaar.
</item>
</itemize>
</p>
</sect1>
<sect1><heading>Op de server</heading>
<p>
<itemize>
<item>
Download <tt>ntadm65x.zip</tt> vanuit
<url url="ftp://www.openlinksw.com/" name="ftp://www.openlinksw.com/">, 
naar je NT-server.
</item>
<item><tt>unzip ntadm65x.zip</tt>
</item>
<item><tt>cd disk1</tt> - directory waar je het package decomprimeert.
</item>
<item>voer <tt>setup</tt> uit en volg de instructies om de Openlink
middleware te installeren.
</item>
<item>denk eraan de Openlink request broker vanuit het opstartmenu of
het service controlpanel op te starten.
</item>
</itemize>
</p>
</sect1>
<sect1><heading>Configuratie voor test</heading>
<p>
<itemize>
<item>
bewaar het <tt>.odbc.ini</tt> bestand in je homedirectory.
</item>
<item>kopieer <tt>udbc.ini</tt> vanuit de bin directory van de Openlink 
middleware installatiedirectory naar de
directory <tt>/etc</tt> op de client.
</item>
<item>pas <tt>/etc/udbc.ini</tt> aan. 
Wijzig in de sectie [dsn_sql6], de Host, Database, UserName
en Password velden overeenkomstig je serverinstellingen.
Hier is een deel van mijn <tt>/etc/udbc.ini</tt>:
<tscreen><verb>
  [dsn_sql6]
  Host            = 10.0.0.1
  ServerType      = sql6
  ;ServerOptions  =
  Database        = pubs
  ;FetchBufferSize = 30
  UserName        = sa
  Password        = xxxxxxx
</verb></tscreen>
</item>
<item>voeg aan je omgeving 
<tt>LD_LIBRARY_PATH='/usr/local/openlink/odbcsdk/lib'</tt> toe en
exporteer deze variabele. Typ onder de csh-shell:
<tt>setenv LD_LIBRARY_PATH /usr/local/openlink/odbcsdk/lib</tt></item>
</itemize>
</p>
</sect1>
<sect1><heading>Test met <tt>odbctest</tt></heading>
<p>
<itemize>
<item><tt>cd /usr/local/openlink/odbcsdk/examples</tt></item>
<item><tt>./odbctest</tt></item>
<item>typ: <tt>dsn=dsn_sql6</tt></item>
<item>wanneer 'sql>' verschijnt. 
Je kunt nu wat sql opdrachten uitvoeren om de verbinding te testen.
</item>
</itemize>
</p>
</sect1>
</sect>
<sect><heading>PHP</heading>
<p>
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.
<itemize>
<item>Download <tt>php-3.0.11.tar.gz</tt> vanaf 
<url url="http://www.php.net/" name="http://www.php.net">. 
</item>
<item> Voer de volgende stappen uit:
<tscreen><verb>
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
</verb></tscreen>
Het uitvoerbare bestand php zal in <tt>/usr/local/bin</tt> worden
geïnstalleerd. Kopieer voor de uitvoering van php de library bestanden
<tt>/usr/local/openlink/odbcsdk/lib</tt> naar <tt>/usr/lib</tt> zodat
het makkelijker is voor php om de openlink library's te vinden (ik weet
dat er betere methoden zijn).
</item>
</itemize>
</p>
</sect>
<sect><heading>Voorbeeld</heading>
<p>
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.)
<tscreen><verb>
<?
/* 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>";
}
?>
</verb></tscreen>
</p>
</sect>
<sect><heading>FAQ</heading>
<p>
<itemize>
<item><em>Werkt deze exacte procedure ook voor MSSQL 7.0?</em>
Ja, Openlink zal hun software naar 7.0 upgraden, maar ik weet niet wanneer.
</item>
<item><em>Ik volgde dit document stap-voor-stap op om de openlink drivers
te installeren, maar ik eindigde bij de stap
"installeer ntadm65x.zip". Ndat ik ntadm65x installeerde,
probeerde ik de OpenLink Request Broker te starten en kreeg de foutmelding:
</em>
<tscreen><verb>
 unable to open the service control manager <5>
 press RETURN to exit oplrqb
</verb></tscreen>
<em>Kun je me alsjeblieft vertellen hoe ik dat probleem kan corrigeren?</em>
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.
</item>
</itemize>
</p>
</sect>
</article>
</linuxdoc>
 |