File: MSSQL6-Openlink-PHP-ODBC-NL.sgml

package info (click to toggle)
doc-linux-nl 20051127-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 16,408 kB
  • ctags: 94
  • sloc: xml: 47,403; makefile: 312; perl: 193; sh: 116; ansic: 12; csh: 9
file content (364 lines) | stat: -rw-r--r-- 11,689 bytes parent folder | download | duplicates (2)
1
2
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&euml;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 &lsqb;dsn_sql6&rsqb;, de Host, Database, UserName
en Password velden overeenkomstig je serverinstellingen.
Hier is een deel van mijn <tt>/etc/udbc.ini</tt>:
<tscreen><verb>
  &lsqb;dsn_sql6&rsqb;
  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&gt;' 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&iuml;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>
&lt;?
/* 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>";
}
?&gt;

</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
&quot;installeer ntadm65x.zip&quot;. 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 &lt;5&gt;
 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>