Deployed 59ff7f1 to 5.4 with MkDocs 1.1.2 and mike 0.5.5
[GitHub/WoltLab/woltlab.github.io.git] / latest / php / database-access / index.html
CommitLineData
0c5338dd
TD
1
2<!doctype html>
3<html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9
10
11
fb962f09
WG
12 <link rel="icon" href="../../assets/default.favicon.ico">
13 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.0">
0c5338dd
TD
14
15
16
17 <title>Database Access - WoltLab Suite Documentation</title>
18
19
20
fb962f09 21 <link rel="stylesheet" href="../../assets/stylesheets/main.33e2939f.min.css">
0c5338dd
TD
22
23
fb962f09 24 <link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
0c5338dd
TD
25
26
27
28 <meta name="theme-color" content="#009485">
29
30
31
32
33
fd8430cb
WG
34
35
0c5338dd
TD
36
37
38 <link rel="stylesheet" href="../../stylesheets/extra.css">
39
40
41
42
43
44 </head>
45
46
47
48
49
50
51
52 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
0c5338dd
TD
53
54
fb962f09
WG
55 <script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
56
0c5338dd
TD
57 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
58 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
59 <label class="md-overlay" for="__drawer"></label>
60 <div data-md-component="skip">
61
62
63 <a href="#database-access" class="md-skip">
64 Skip to content
65 </a>
66
67 </div>
68 <div data-md-component="announce">
69
70 <aside class="md-announce">
71 <div class="md-announce__inner md-grid md-typeset">
72
73 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
74
75 </div>
76 </aside>
77
78 </div>
79
fb962f09 80 <header class="md-header" data-md-component="header">
0c5338dd 81 <nav class="md-header__inner md-grid" aria-label="Header">
fb962f09 82 <a href="../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
0c5338dd
TD
83
84 <img src="../../assets/logo.png" alt="logo">
85
86 </a>
87 <label class="md-header__button md-icon" for="__drawer">
88 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
89 </label>
90 <div class="md-header__title" data-md-component="header-title">
91 <div class="md-header__ellipsis">
92 <div class="md-header__topic">
93 <span class="md-ellipsis">
94 WoltLab Suite Documentation
95 </span>
96 </div>
97 <div class="md-header__topic" data-md-component="header-topic">
98 <span class="md-ellipsis">
99
100 Database Access
101
102 </span>
103 </div>
104 </div>
0c5338dd
TD
105 </div>
106
fb962f09
WG
107
108
a3639e76
WG
109 <label class="md-header__button md-icon" for="__search">
110 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
111 </label>
112
113<div class="md-search" data-md-component="search" role="dialog">
114 <label class="md-search__overlay" for="__search"></label>
115 <div class="md-search__inner" role="search">
116 <form class="md-search__form" name="search">
117 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
118 <label class="md-search__icon md-icon" for="__search">
119 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
120 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
121 </label>
122 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
fb962f09 123 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
a3639e76
WG
124 </button>
125 </form>
126 <div class="md-search__output">
127 <div class="md-search__scrollwrap" data-md-scrollfix>
128 <div class="md-search-result" data-md-component="search-result">
129 <div class="md-search-result__meta">
130 Initializing search
131 </div>
132 <ol class="md-search-result__list"></ol>
133 </div>
134 </div>
135 </div>
136 </div>
137</div>
138
0c5338dd 139
7124f4cb
WG
140 <div class="md-header__source">
141
142<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
143 <div class="md-source__icon md-icon">
144
fb962f09 145 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
7124f4cb
WG
146 </div>
147 <div class="md-source__repository">
148 GitHub
149 </div>
150</a>
151 </div>
152
0c5338dd
TD
153 </nav>
154</header>
155
156 <div class="md-container" data-md-component="container">
157
158
159
160
161 <main class="md-main" data-md-component="main">
162 <div class="md-main__inner md-grid">
163
164
165
166 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
167 <div class="md-sidebar__scrollwrap">
168 <div class="md-sidebar__inner">
169
170
171
0c5338dd
TD
172<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
173 <label class="md-nav__title" for="__drawer">
fb962f09 174 <a href="../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
0c5338dd
TD
175
176 <img src="../../assets/logo.png" alt="logo">
177
178 </a>
179 WoltLab Suite Documentation
180 </label>
181
7124f4cb
WG
182 <div class="md-nav__source">
183
184<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
185 <div class="md-source__icon md-icon">
186
fb962f09 187 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
7124f4cb
WG
188 </div>
189 <div class="md-source__repository">
190 GitHub
191 </div>
192</a>
193 </div>
194
0c5338dd
TD
195 <ul class="md-nav__list" data-md-scrollfix>
196
197
198
199
200
201
202
203
204 <li class="md-nav__item">
205 <a href="../../getting-started/" class="md-nav__link">
206 Getting Started
207 </a>
208 </li>
209
210
211
212
213
214
215
216
217
218
219
220
221
222 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
223
224
225 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
226
227 <label class="md-nav__link" for="__nav_2">
228 PHP API
229 <span class="md-nav__icon md-icon"></span>
230 </label>
231 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
232 <label class="md-nav__title" for="__nav_2">
233 <span class="md-nav__icon md-icon"></span>
234 PHP API
235 </label>
236 <ul class="md-nav__list" data-md-scrollfix>
237
238
239
240
241
242 <li class="md-nav__item">
243 <a href="../pages/" class="md-nav__link">
244 Pages
245 </a>
246 </li>
247
248
249
250
251
252
253
254 <li class="md-nav__item">
255 <a href="../database-objects/" class="md-nav__link">
256 Database Objects
257 </a>
258 </li>
259
260
261
262
263
264
265
266
267
268 <li class="md-nav__item md-nav__item--active">
269
270 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
271
272
273
274
275 <label class="md-nav__link md-nav__link--active" for="__toc">
276 Database Access
277 <span class="md-nav__icon md-icon"></span>
278 </label>
279
280 <a href="./" class="md-nav__link md-nav__link--active">
281 Database Access
282 </a>
283
284
285<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
286
287
288
289
290
291 <label class="md-nav__title" for="__toc">
292 <span class="md-nav__icon md-icon"></span>
293 Table of contents
294 </label>
295 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
296
297 <li class="md-nav__item">
298 <a href="#the-preparedstatement-object" class="md-nav__link">
299 The PreparedStatement Object
300 </a>
301
302 <nav class="md-nav" aria-label="The PreparedStatement Object">
303 <ul class="md-nav__list">
304
305 <li class="md-nav__item">
306 <a href="#query-parameters" class="md-nav__link">
307 Query Parameters
308 </a>
309
310</li>
311
312 <li class="md-nav__item">
313 <a href="#fetching-a-single-result" class="md-nav__link">
314 Fetching a Single Result
315 </a>
316
317</li>
318
319 <li class="md-nav__item">
320 <a href="#fetch-by-column" class="md-nav__link">
321 Fetch by Column
322 </a>
323
324</li>
325
326 <li class="md-nav__item">
327 <a href="#fetching-all-results" class="md-nav__link">
328 Fetching All Results
329 </a>
330
331</li>
332
333 </ul>
334 </nav>
335
336</li>
337
338 <li class="md-nav__item">
339 <a href="#building-complex-conditions" class="md-nav__link">
340 Building Complex Conditions
341 </a>
342
343</li>
344
345 <li class="md-nav__item">
346 <a href="#insert-or-update-in-bulk" class="md-nav__link">
347 INSERT or UPDATE in Bulk
348 </a>
349
350</li>
351
352 </ul>
353
354</nav>
355
356 </li>
357
358
359
360
361
362
363
364 <li class="md-nav__item">
365 <a href="../exceptions/" class="md-nav__link">
366 Exceptions
367 </a>
368 </li>
369
370
371
372
373
374
375
376
377 <li class="md-nav__item md-nav__item--nested">
378
379
380 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" >
381
382 <label class="md-nav__link" for="__nav_2_5">
383 API
384 <span class="md-nav__icon md-icon"></span>
385 </label>
386 <nav class="md-nav" aria-label="API" data-md-level="2">
387 <label class="md-nav__title" for="__nav_2_5">
388 <span class="md-nav__icon md-icon"></span>
389 API
390 </label>
391 <ul class="md-nav__list" data-md-scrollfix>
392
393
394
395
396
6923e968
WG
397
398 <li class="md-nav__item md-nav__item--nested">
399
400
401 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_1" type="checkbox" id="__nav_2_5_1" >
402
403 <label class="md-nav__link" for="__nav_2_5_1">
404 Caches
405 <span class="md-nav__icon md-icon"></span>
406 </label>
407 <nav class="md-nav" aria-label="Caches" data-md-level="3">
408 <label class="md-nav__title" for="__nav_2_5_1">
409 <span class="md-nav__icon md-icon"></span>
410 Caches
411 </label>
412 <ul class="md-nav__list" data-md-scrollfix>
413
414
415
416
417
0c5338dd
TD
418 <li class="md-nav__item">
419 <a href="../api/caches/" class="md-nav__link">
6923e968
WG
420 Overview
421 </a>
422 </li>
423
424
425
426
427
428
429
430 <li class="md-nav__item">
431 <a href="../api/caches_persistent-caches/" class="md-nav__link">
432 Persistent Caches
433 </a>
434 </li>
435
436
437
438
439
440
441
442 <li class="md-nav__item">
443 <a href="../api/caches_runtime-caches/" class="md-nav__link">
444 Runtime Caches
0c5338dd
TD
445 </a>
446 </li>
447
448
449
6923e968
WG
450 </ul>
451 </nav>
452 </li>
453
454
455
0c5338dd
TD
456
457
458
459
460 <li class="md-nav__item">
461 <a href="../api/comments/" class="md-nav__link">
462 Comments
463 </a>
464 </li>
465
466
467
468
469
470
471
472 <li class="md-nav__item">
473 <a href="../api/cronjobs/" class="md-nav__link">
474 Cronjobs
475 </a>
476 </li>
477
478
479
480
481
482
483
484 <li class="md-nav__item">
485 <a href="../api/events/" class="md-nav__link">
486 Events
487 </a>
488 </li>
489
490
491
492
493
494
495
496
497 <li class="md-nav__item md-nav__item--nested">
498
499
500 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" >
501
502 <label class="md-nav__link" for="__nav_2_5_5">
503 Form Builder
504 <span class="md-nav__icon md-icon"></span>
505 </label>
506 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
507 <label class="md-nav__title" for="__nav_2_5_5">
508 <span class="md-nav__icon md-icon"></span>
509 Form Builder
510 </label>
511 <ul class="md-nav__list" data-md-scrollfix>
512
513
514
515
516
517 <li class="md-nav__item">
518 <a href="../api/form_builder/overview/" class="md-nav__link">
519 Overview
520 </a>
521 </li>
522
523
524
525
526
527
528
529 <li class="md-nav__item">
530 <a href="../api/form_builder/structure/" class="md-nav__link">
531 Structure
532 </a>
533 </li>
534
535
536
537
538
539
540
541 <li class="md-nav__item">
542 <a href="../api/form_builder/form_fields/" class="md-nav__link">
543 Fields
544 </a>
545 </li>
546
547
548
549
550
551
552
553 <li class="md-nav__item">
554 <a href="../api/form_builder/validation_data/" class="md-nav__link">
555 Validation and Data
556 </a>
557 </li>
558
559
560
561
562
563
564
565 <li class="md-nav__item">
566 <a href="../api/form_builder/dependencies/" class="md-nav__link">
567 Dependencies
568 </a>
569 </li>
570
571
572
573 </ul>
574 </nav>
575 </li>
576
577
578
579
580
581
582
583 <li class="md-nav__item">
584 <a href="../api/package_installation_plugins/" class="md-nav__link">
585 Package Installation Plugins
586 </a>
587 </li>
588
589
590
591
592
593
594
595 <li class="md-nav__item">
596 <a href="../api/user_activity_points/" class="md-nav__link">
597 User Activity Points
598 </a>
599 </li>
600
601
602
603
604
605
606
607 <li class="md-nav__item">
608 <a href="../api/user_notifications/" class="md-nav__link">
609 User Notifications
610 </a>
611 </li>
612
613
614
615
616
617
618
619 <li class="md-nav__item">
620 <a href="../api/sitemaps/" class="md-nav__link">
621 Sitemaps
622 </a>
623 </li>
624
625
626
627 </ul>
628 </nav>
629 </li>
630
631
632
633
634
635
636
637 <li class="md-nav__item">
638 <a href="../code-style/" class="md-nav__link">
639 Code Style
640 </a>
641 </li>
642
643
644
645
646
647
648
649 <li class="md-nav__item">
650 <a href="../apps/" class="md-nav__link">
651 Apps
652 </a>
653 </li>
654
655
656
657
658
659
660
661 <li class="md-nav__item">
662 <a href="../gdpr/" class="md-nav__link">
663 GDPR
664 </a>
665 </li>
666
667
668
669 </ul>
670 </nav>
671 </li>
672
673
674
675
676
677
678
679
680
681
682
683 <li class="md-nav__item md-nav__item--nested">
684
685
686 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
687
688 <label class="md-nav__link" for="__nav_3">
689 Languages, Templates & CSS
690 <span class="md-nav__icon md-icon"></span>
691 </label>
692 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
693 <label class="md-nav__title" for="__nav_3">
694 <span class="md-nav__icon md-icon"></span>
695 Languages, Templates & CSS
696 </label>
697 <ul class="md-nav__list" data-md-scrollfix>
698
699
700
701
702
703 <li class="md-nav__item">
704 <a href="../../view/languages/" class="md-nav__link">
705 Languages
706 </a>
707 </li>
708
709
710
711
712
713
714
715 <li class="md-nav__item">
716 <a href="../../view/templates/" class="md-nav__link">
717 Templates
718 </a>
719 </li>
720
721
722
723
724
725
726
6923e968
WG
727 <li class="md-nav__item">
728 <a href="../../view/template-plugins/" class="md-nav__link">
729 Template Plugins
730 </a>
731 </li>
732
733
734
735
736
737
738
0c5338dd
TD
739 <li class="md-nav__item">
740 <a href="../../view/css/" class="md-nav__link">
741 CSS
742 </a>
743 </li>
744
745
746
747 </ul>
748 </nav>
749 </li>
750
751
752
753
754
755
756
757
758
759
760
761 <li class="md-nav__item md-nav__item--nested">
762
763
764 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
765
766 <label class="md-nav__link" for="__nav_4">
77efcd46 767 TypeScript and JavaScript API
0c5338dd
TD
768 <span class="md-nav__icon md-icon"></span>
769 </label>
77efcd46 770 <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1">
0c5338dd
TD
771 <label class="md-nav__title" for="__nav_4">
772 <span class="md-nav__icon md-icon"></span>
77efcd46 773 TypeScript and JavaScript API
0c5338dd
TD
774 </label>
775 <ul class="md-nav__list" data-md-scrollfix>
776
777
778
779
780
781 <li class="md-nav__item">
782 <a href="../../javascript/general-usage/" class="md-nav__link">
783 General Usage
784 </a>
785 </li>
786
787
788
789
790
791
792
77efcd46
WG
793 <li class="md-nav__item">
794 <a href="../../javascript/typescript/" class="md-nav__link">
795 TypeScript
796 </a>
797 </li>
798
799
800
801
802
803
804
0c5338dd
TD
805
806 <li class="md-nav__item md-nav__item--nested">
807
808
77efcd46 809 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
0c5338dd 810
77efcd46 811 <label class="md-nav__link" for="__nav_4_3">
0c5338dd
TD
812 New API
813 <span class="md-nav__icon md-icon"></span>
814 </label>
815 <nav class="md-nav" aria-label="New API" data-md-level="2">
77efcd46 816 <label class="md-nav__title" for="__nav_4_3">
0c5338dd
TD
817 <span class="md-nav__icon md-icon"></span>
818 New API
819 </label>
820 <ul class="md-nav__list" data-md-scrollfix>
821
822
823
824
825
826 <li class="md-nav__item">
827 <a href="../../javascript/new-api_writing-a-module/" class="md-nav__link">
828 Writing a module
829 </a>
830 </li>
831
832
833
834
835
836
837
838 <li class="md-nav__item">
839 <a href="../../javascript/new-api_data-structures/" class="md-nav__link">
840 Data Structures
841 </a>
842 </li>
843
844
845
846
847
848
849
850 <li class="md-nav__item">
851 <a href="../../javascript/new-api_core/" class="md-nav__link">
852 Core Functions
853 </a>
854 </li>
855
856
857
858
859
860
861
862 <li class="md-nav__item">
863 <a href="../../javascript/new-api_dom/" class="md-nav__link">
864 DOM
865 </a>
866 </li>
867
868
869
870
871
872
873
874 <li class="md-nav__item">
875 <a href="../../javascript/new-api_events/" class="md-nav__link">
876 Event Handling
877 </a>
878 </li>
879
880
881
882
883
884
885
886 <li class="md-nav__item">
887 <a href="../../javascript/new-api_ajax/" class="md-nav__link">
888 Ajax
889 </a>
890 </li>
891
892
893
894
895
896
897
898 <li class="md-nav__item">
899 <a href="../../javascript/new-api_dialogs/" class="md-nav__link">
900 Dialogs
901 </a>
902 </li>
903
904
905
906
907
908
909
910 <li class="md-nav__item">
911 <a href="../../javascript/new-api_browser/" class="md-nav__link">
912 Browser and Screen Sizes
913 </a>
914 </li>
915
916
917
918
919
920
921
922 <li class="md-nav__item">
923 <a href="../../javascript/new-api_ui/" class="md-nav__link">
924 User Interface
925 </a>
926 </li>
927
928
929
930 </ul>
931 </nav>
932 </li>
933
934
935
936
937
938
939
940 <li class="md-nav__item">
941 <a href="../../javascript/legacy-api/" class="md-nav__link">
942 Legacy API
943 </a>
944 </li>
945
946
947
948
949
950
951
952 <li class="md-nav__item">
953 <a href="../../javascript/helper-functions/" class="md-nav__link">
954 Helper Functions
955 </a>
956 </li>
957
958
959
960
961
962
963
964 <li class="md-nav__item">
965 <a href="../../javascript/code-snippets/" class="md-nav__link">
966 Code Snippets
967 </a>
968 </li>
969
970
971
972 </ul>
973 </nav>
974 </li>
975
976
977
978
979
980
981
982
983
984
985
986 <li class="md-nav__item md-nav__item--nested">
987
988
989 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
990
991 <label class="md-nav__link" for="__nav_5">
992 Package Components
993 <span class="md-nav__icon md-icon"></span>
994 </label>
995 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
996 <label class="md-nav__title" for="__nav_5">
997 <span class="md-nav__icon md-icon"></span>
998 Package Components
999 </label>
1000 <ul class="md-nav__list" data-md-scrollfix>
1001
1002
1003
1004
1005
1006 <li class="md-nav__item">
1007 <a href="../../package/package-xml/" class="md-nav__link">
1008 package.xml
1009 </a>
1010 </li>
1011
1012
1013
1014
1015
1016
1017
1018
1019 <li class="md-nav__item md-nav__item--nested">
1020
1021
1022 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
1023
1024 <label class="md-nav__link" for="__nav_5_2">
1025 PIPs
1026 <span class="md-nav__icon md-icon"></span>
1027 </label>
1028 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
1029 <label class="md-nav__title" for="__nav_5_2">
1030 <span class="md-nav__icon md-icon"></span>
1031 PIPs
1032 </label>
1033 <ul class="md-nav__list" data-md-scrollfix>
1034
1035
1036
1037
1038
1039 <li class="md-nav__item">
1040 <a href="../../package/pip/" class="md-nav__link">
1041 Overview
1042 </a>
1043 </li>
1044
1045
1046
1047
1048
1049
1050
1051 <li class="md-nav__item">
1052 <a href="../../package/pip/acl-option/" class="md-nav__link">
1053 aclOption
1054 </a>
1055 </li>
1056
1057
1058
1059
1060
1061
1062
1063 <li class="md-nav__item">
1064 <a href="../../package/pip/acp-menu/" class="md-nav__link">
1065 acpMenu
1066 </a>
1067 </li>
1068
1069
1070
1071
1072
1073
1074
1075 <li class="md-nav__item">
1076 <a href="../../package/pip/acp-search-provider/" class="md-nav__link">
1077 acpSearchProvider
1078 </a>
1079 </li>
1080
1081
1082
1083
1084
1085
1086
1087 <li class="md-nav__item">
1088 <a href="../../package/pip/acp-template/" class="md-nav__link">
1089 acpTemplate
1090 </a>
1091 </li>
1092
1093
1094
1095
1096
1097
1098
1099 <li class="md-nav__item">
1100 <a href="../../package/pip/bbcode/" class="md-nav__link">
1101 bbcode
1102 </a>
1103 </li>
1104
1105
1106
1107
1108
1109
1110
1111 <li class="md-nav__item">
1112 <a href="../../package/pip/box/" class="md-nav__link">
1113 box
1114 </a>
1115 </li>
1116
1117
1118
1119
1120
1121
1122
1123 <li class="md-nav__item">
1124 <a href="../../package/pip/clipboard-action/" class="md-nav__link">
1125 clipboardAction
1126 </a>
1127 </li>
1128
1129
1130
1131
1132
1133
1134
1135 <li class="md-nav__item">
1136 <a href="../../package/pip/core-object/" class="md-nav__link">
1137 coreObject
1138 </a>
1139 </li>
1140
1141
1142
1143
1144
1145
1146
1147 <li class="md-nav__item">
1148 <a href="../../package/pip/cronjob/" class="md-nav__link">
1149 cronjob
1150 </a>
1151 </li>
1152
1153
1154
1155
1156
1157
1158
6923e968
WG
1159 <li class="md-nav__item">
1160 <a href="../../package/pip/database/" class="md-nav__link">
1161 database
1162 </a>
1163 </li>
1164
1165
1166
1167
1168
1169
1170
0c5338dd
TD
1171 <li class="md-nav__item">
1172 <a href="../../package/pip/event-listener/" class="md-nav__link">
1173 eventListener
1174 </a>
1175 </li>
1176
1177
1178
1179
1180
1181
1182
1183 <li class="md-nav__item">
1184 <a href="../../package/pip/file/" class="md-nav__link">
1185 file
1186 </a>
1187 </li>
1188
1189
1190
1191
1192
1193
1194
1195 <li class="md-nav__item">
1196 <a href="../../package/pip/language/" class="md-nav__link">
1197 language
1198 </a>
1199 </li>
1200
1201
1202
1203
1204
1205
1206
1207 <li class="md-nav__item">
1208 <a href="../../package/pip/media-provider/" class="md-nav__link">
1209 mediaProvider
1210 </a>
1211 </li>
1212
1213
1214
1215
1216
1217
1218
1219 <li class="md-nav__item">
1220 <a href="../../package/pip/menu/" class="md-nav__link">
1221 menu
1222 </a>
1223 </li>
1224
1225
1226
1227
1228
1229
1230
1231 <li class="md-nav__item">
1232 <a href="../../package/pip/menu-item/" class="md-nav__link">
1233 menuItem
1234 </a>
1235 </li>
1236
1237
1238
1239
1240
1241
1242
1243 <li class="md-nav__item">
1244 <a href="../../package/pip/object-type/" class="md-nav__link">
1245 objectType
1246 </a>
1247 </li>
1248
1249
1250
1251
1252
1253
1254
1255 <li class="md-nav__item">
1256 <a href="../../package/pip/object-type-definition/" class="md-nav__link">
1257 objectTypeDefinition
1258 </a>
1259 </li>
1260
1261
1262
1263
1264
1265
1266
1267 <li class="md-nav__item">
1268 <a href="../../package/pip/option/" class="md-nav__link">
1269 option
1270 </a>
1271 </li>
1272
1273
1274
1275
1276
1277
1278
1279 <li class="md-nav__item">
1280 <a href="../../package/pip/page/" class="md-nav__link">
1281 page
1282 </a>
1283 </li>
1284
1285
1286
1287
1288
1289
1290
1291 <li class="md-nav__item">
1292 <a href="../../package/pip/pip/" class="md-nav__link">
1293 pip
1294 </a>
1295 </li>
1296
1297
1298
1299
1300
1301
1302
1303 <li class="md-nav__item">
1304 <a href="../../package/pip/script/" class="md-nav__link">
1305 script
1306 </a>
1307 </li>
1308
1309
1310
1311
1312
1313
1314
1315 <li class="md-nav__item">
1316 <a href="../../package/pip/smiley/" class="md-nav__link">
1317 smiley
1318 </a>
1319 </li>
1320
1321
1322
1323
1324
1325
1326
1327 <li class="md-nav__item">
1328 <a href="../../package/pip/sql/" class="md-nav__link">
1329 sql
1330 </a>
1331 </li>
1332
1333
1334
1335
1336
1337
1338
1339 <li class="md-nav__item">
1340 <a href="../../package/pip/style/" class="md-nav__link">
1341 style
1342 </a>
1343 </li>
1344
1345
1346
1347
1348
1349
1350
1351 <li class="md-nav__item">
1352 <a href="../../package/pip/template/" class="md-nav__link">
1353 template
1354 </a>
1355 </li>
1356
1357
1358
1359
1360
1361
1362
1363 <li class="md-nav__item">
1364 <a href="../../package/pip/template-listener/" class="md-nav__link">
1365 templateListener
1366 </a>
1367 </li>
1368
1369
1370
1371
1372
1373
1374
1375 <li class="md-nav__item">
1376 <a href="../../package/pip/user-group-option/" class="md-nav__link">
1377 userGroupOption
1378 </a>
1379 </li>
1380
1381
1382
1383
1384
1385
1386
1387 <li class="md-nav__item">
1388 <a href="../../package/pip/user-menu/" class="md-nav__link">
1389 userMenu
1390 </a>
1391 </li>
1392
1393
1394
1395
1396
1397
1398
1399 <li class="md-nav__item">
1400 <a href="../../package/pip/user-notification-event/" class="md-nav__link">
1401 userNotificationEvent
1402 </a>
1403 </li>
1404
1405
1406
1407
1408
1409
1410
1411 <li class="md-nav__item">
1412 <a href="../../package/pip/user-option/" class="md-nav__link">
1413 userOption
1414 </a>
1415 </li>
1416
1417
1418
1419
1420
1421
1422
1423 <li class="md-nav__item">
1424 <a href="../../package/pip/user-profile-menu/" class="md-nav__link">
1425 userProfileMenu
1426 </a>
1427 </li>
1428
1429
1430
1431 </ul>
1432 </nav>
1433 </li>
1434
1435
1436
1437
1438
1439
1440
1441 <li class="md-nav__item">
1442 <a href="../../package/database-php-api/" class="md-nav__link">
1443 Database PHP API
1444 </a>
1445 </li>
1446
1447
1448
1449 </ul>
1450 </nav>
1451 </li>
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463 <li class="md-nav__item md-nav__item--nested">
1464
1465
1466 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1467
1468 <label class="md-nav__link" for="__nav_6">
1469 Migration
1470 <span class="md-nav__icon md-icon"></span>
1471 </label>
1472 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1473 <label class="md-nav__title" for="__nav_6">
1474 <span class="md-nav__icon md-icon"></span>
1475 Migration
1476 </label>
1477 <ul class="md-nav__list" data-md-scrollfix>
1478
1479
1480
1481
1482
1483
1484 <li class="md-nav__item md-nav__item--nested">
1485
1486
1487 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1488
1489 <label class="md-nav__link" for="__nav_6_1">
1490 Migrating from WSC 5.3
1491 <span class="md-nav__icon md-icon"></span>
1492 </label>
1493 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1494 <label class="md-nav__title" for="__nav_6_1">
1495 <span class="md-nav__icon md-icon"></span>
1496 Migrating from WSC 5.3
1497 </label>
1498 <ul class="md-nav__list" data-md-scrollfix>
1499
1500
1501
1502
1503
1504 <li class="md-nav__item">
1505 <a href="../../migration/wsc53/php/" class="md-nav__link">
1506 PHP API
1507 </a>
1508 </li>
1509
1510
1511
1512
1513
1514
1515
1516 <li class="md-nav__item">
1517 <a href="../../migration/wsc53/session/" class="md-nav__link">
1518 Session Handling and Authentication
1519 </a>
1520 </li>
1521
1522
1523
1524
1525
1526
1527
1528 <li class="md-nav__item">
1529 <a href="../../migration/wsc53/javascript/" class="md-nav__link">
77efcd46 1530 TypeScript and JavaScript
0c5338dd
TD
1531 </a>
1532 </li>
1533
1534
1535
1536
1537
1538
1539
1540 <li class="md-nav__item">
1541 <a href="../../migration/wsc53/templates/" class="md-nav__link">
1542 Templates
1543 </a>
1544 </li>
1545
1546
1547
1548
1549
1550
1551
1552 <li class="md-nav__item">
1553 <a href="../../migration/wsc53/libraries/" class="md-nav__link">
1554 Third Party Libraries
1555 </a>
1556 </li>
1557
1558
1559
1560 </ul>
1561 </nav>
1562 </li>
1563
1564
1565
1566
1567
1568
1569
1570
1571 <li class="md-nav__item md-nav__item--nested">
1572
1573
1574 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1575
1576 <label class="md-nav__link" for="__nav_6_2">
1577 Migrating from WSC 5.2
1578 <span class="md-nav__icon md-icon"></span>
1579 </label>
1580 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1581 <label class="md-nav__title" for="__nav_6_2">
1582 <span class="md-nav__icon md-icon"></span>
1583 Migrating from WSC 5.2
1584 </label>
1585 <ul class="md-nav__list" data-md-scrollfix>
1586
1587
1588
1589
1590
1591 <li class="md-nav__item">
1592 <a href="../../migration/wsc52/php/" class="md-nav__link">
1593 PHP API
1594 </a>
1595 </li>
1596
1597
1598
1599
1600
1601
1602
1603 <li class="md-nav__item">
1604 <a href="../../migration/wsc52/templates/" class="md-nav__link">
1605 Templates and Languages
1606 </a>
1607 </li>
1608
1609
1610
1611
1612
1613
1614
1615 <li class="md-nav__item">
1616 <a href="../../migration/wsc52/libraries/" class="md-nav__link">
1617 Third Party Libraries
1618 </a>
1619 </li>
1620
1621
1622
1623 </ul>
1624 </nav>
1625 </li>
1626
1627
1628
1629
1630
1631
1632
1633
1634 <li class="md-nav__item md-nav__item--nested">
1635
1636
1637 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1638
1639 <label class="md-nav__link" for="__nav_6_3">
1640 Migrating from WSC 3.1
1641 <span class="md-nav__icon md-icon"></span>
1642 </label>
1643 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1644 <label class="md-nav__title" for="__nav_6_3">
1645 <span class="md-nav__icon md-icon"></span>
1646 Migrating from WSC 3.1
1647 </label>
1648 <ul class="md-nav__list" data-md-scrollfix>
1649
1650
1651
1652
1653
1654 <li class="md-nav__item">
1655 <a href="../../migration/wsc31/php/" class="md-nav__link">
1656 PHP API
1657 </a>
1658 </li>
1659
1660
1661
1662 </ul>
1663 </nav>
1664 </li>
1665
1666
1667
1668
1669
1670
1671
1672
1673 <li class="md-nav__item md-nav__item--nested">
1674
1675
1676 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1677
1678 <label class="md-nav__link" for="__nav_6_4">
1679 Migrating from WSC 3.0
1680 <span class="md-nav__icon md-icon"></span>
1681 </label>
1682 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1683 <label class="md-nav__title" for="__nav_6_4">
1684 <span class="md-nav__icon md-icon"></span>
1685 Migrating from WSC 3.0
1686 </label>
1687 <ul class="md-nav__list" data-md-scrollfix>
1688
1689
1690
1691
1692
1693 <li class="md-nav__item">
1694 <a href="../../migration/wsc30/php/" class="md-nav__link">
1695 PHP API
1696 </a>
1697 </li>
1698
1699
1700
1701
1702
1703
1704
1705 <li class="md-nav__item">
1706 <a href="../../migration/wsc30/javascript/" class="md-nav__link">
1707 JavaScript API
1708 </a>
1709 </li>
1710
1711
1712
1713
1714
1715
1716
1717 <li class="md-nav__item">
1718 <a href="../../migration/wsc30/templates/" class="md-nav__link">
1719 Templates
1720 </a>
1721 </li>
1722
1723
1724
1725
1726
1727
1728
1729 <li class="md-nav__item">
1730 <a href="../../migration/wsc30/css/" class="md-nav__link">
1731 CSS
1732 </a>
1733 </li>
1734
1735
1736
1737
1738
1739
1740
1741 <li class="md-nav__item">
1742 <a href="../../migration/wsc30/package/" class="md-nav__link">
1743 Package Components
1744 </a>
1745 </li>
1746
1747
1748
1749 </ul>
1750 </nav>
1751 </li>
1752
1753
1754
1755
1756
1757
1758
1759
1760 <li class="md-nav__item md-nav__item--nested">
1761
1762
1763 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1764
1765 <label class="md-nav__link" for="__nav_6_5">
1766 Migrating from WCF 2.1
1767 <span class="md-nav__icon md-icon"></span>
1768 </label>
1769 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1770 <label class="md-nav__title" for="__nav_6_5">
1771 <span class="md-nav__icon md-icon"></span>
1772 Migrating from WCF 2.1
1773 </label>
1774 <ul class="md-nav__list" data-md-scrollfix>
1775
1776
1777
1778
1779
1780 <li class="md-nav__item">
1781 <a href="../../migration/wcf21/php/" class="md-nav__link">
1782 PHP API
1783 </a>
1784 </li>
1785
1786
1787
1788
1789
1790
1791
1792 <li class="md-nav__item">
1793 <a href="../../migration/wcf21/templates/" class="md-nav__link">
1794 Templates
1795 </a>
1796 </li>
1797
1798
1799
1800
1801
1802
1803
1804 <li class="md-nav__item">
1805 <a href="../../migration/wcf21/css/" class="md-nav__link">
1806 CSS
1807 </a>
1808 </li>
1809
1810
1811
1812
1813
1814
1815
1816 <li class="md-nav__item">
1817 <a href="../../migration/wcf21/package/" class="md-nav__link">
1818 Package Components
1819 </a>
1820 </li>
1821
1822
1823
1824 </ul>
1825 </nav>
1826 </li>
1827
1828
1829
1830 </ul>
1831 </nav>
1832 </li>
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844 <li class="md-nav__item md-nav__item--nested">
1845
1846
1847 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1848
1849 <label class="md-nav__link" for="__nav_7">
1850 Tutorials
1851 <span class="md-nav__icon md-icon"></span>
1852 </label>
1853 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1854 <label class="md-nav__title" for="__nav_7">
1855 <span class="md-nav__icon md-icon"></span>
1856 Tutorials
1857 </label>
1858 <ul class="md-nav__list" data-md-scrollfix>
1859
1860
1861
1862
1863
1864
1865 <li class="md-nav__item md-nav__item--nested">
1866
1867
1868 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1869
1870 <label class="md-nav__link" for="__nav_7_1">
1871 Tutorial Series
1872 <span class="md-nav__icon md-icon"></span>
1873 </label>
1874 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1875 <label class="md-nav__title" for="__nav_7_1">
1876 <span class="md-nav__icon md-icon"></span>
1877 Tutorial Series
1878 </label>
1879 <ul class="md-nav__list" data-md-scrollfix>
1880
1881
1882
1883
1884
1885 <li class="md-nav__item">
1886 <a href="../../tutorial/series/overview/" class="md-nav__link">
1887 Overview
1888 </a>
1889 </li>
1890
1891
1892
1893
1894
1895
1896
1897 <li class="md-nav__item">
1898 <a href="../../tutorial/series/part_1/" class="md-nav__link">
1899 Part 1
1900 </a>
1901 </li>
1902
1903
1904
1905
1906
1907
1908
1909 <li class="md-nav__item">
1910 <a href="../../tutorial/series/part_2/" class="md-nav__link">
1911 Part 2
1912 </a>
1913 </li>
1914
1915
1916
1917
1918
1919
1920
1921 <li class="md-nav__item">
1922 <a href="../../tutorial/series/part_3/" class="md-nav__link">
1923 Part 3
1924 </a>
1925 </li>
1926
1927
1928
1929 </ul>
1930 </nav>
1931 </li>
1932
1933
1934
1935 </ul>
1936 </nav>
1937 </li>
1938
1939
1940
1941 </ul>
1942</nav>
1943 </div>
1944 </div>
1945 </div>
1946
1947
1948
1949 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1950 <div class="md-sidebar__scrollwrap">
1951 <div class="md-sidebar__inner">
1952
1953<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1954
1955
1956
1957
1958
1959 <label class="md-nav__title" for="__toc">
1960 <span class="md-nav__icon md-icon"></span>
1961 Table of contents
1962 </label>
1963 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1964
1965 <li class="md-nav__item">
1966 <a href="#the-preparedstatement-object" class="md-nav__link">
1967 The PreparedStatement Object
1968 </a>
1969
1970 <nav class="md-nav" aria-label="The PreparedStatement Object">
1971 <ul class="md-nav__list">
1972
1973 <li class="md-nav__item">
1974 <a href="#query-parameters" class="md-nav__link">
1975 Query Parameters
1976 </a>
1977
1978</li>
1979
1980 <li class="md-nav__item">
1981 <a href="#fetching-a-single-result" class="md-nav__link">
1982 Fetching a Single Result
1983 </a>
1984
1985</li>
1986
1987 <li class="md-nav__item">
1988 <a href="#fetch-by-column" class="md-nav__link">
1989 Fetch by Column
1990 </a>
1991
1992</li>
1993
1994 <li class="md-nav__item">
1995 <a href="#fetching-all-results" class="md-nav__link">
1996 Fetching All Results
1997 </a>
1998
1999</li>
2000
2001 </ul>
2002 </nav>
2003
2004</li>
2005
2006 <li class="md-nav__item">
2007 <a href="#building-complex-conditions" class="md-nav__link">
2008 Building Complex Conditions
2009 </a>
2010
2011</li>
2012
2013 <li class="md-nav__item">
2014 <a href="#insert-or-update-in-bulk" class="md-nav__link">
2015 INSERT or UPDATE in Bulk
2016 </a>
2017
2018</li>
2019
2020 </ul>
2021
2022</nav>
2023 </div>
2024 </div>
2025 </div>
2026
2027
2028 <div class="md-content" data-md-component="content">
2029 <article class="md-content__inner md-typeset">
2030
2031
9b8bddda 2032 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/database-access.md" title="Edit this page" class="md-content__button md-icon">
7124f4cb
WG
2033 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
2034 </a>
2035
0c5338dd
TD
2036
2037 <h1 id="database-access">Database Access<a class="headerlink" href="#database-access" title="Permanent link">#</a></h1>
2038<p><a href="../database-objects/">Database Objects</a> provide a convenient and object-oriented approach to work with the database, but there can be use-cases that require raw access including writing methods for model classes. This section assumes that you have either used <a href="https://en.wikipedia.org/wiki/Prepared_statement">prepared statements</a> before or at least understand how it works.</p>
2039<h2 id="the-preparedstatement-object">The PreparedStatement Object<a class="headerlink" href="#the-preparedstatement-object" title="Permanent link">#</a></h2>
2040<p>The database access is designed around <a href="https://github.com/WoltLab/WCF/blob/master/wcfsetup/install/files/lib/system/database/statement/PreparedStatement.class.php">PreparedStatement</a>, built on top of PHP's <code>PDOStatement</code> so that you call all of <code>PDOStatement</code>'s methods, and each query requires you to obtain a statement object.</p>
2041<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2042<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example&quot;</span><span class="p">);</span>
2043<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
2044<span class="k">while</span> <span class="p">(</span><span class="nv">$row</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchArray</span><span class="p">())</span> <span class="p">{</span>
2045 <span class="c1">// handle result</span>
2046<span class="p">}</span>
2047</code></pre></div>
0c5338dd
TD
2048<h3 id="query-parameters">Query Parameters<a class="headerlink" href="#query-parameters" title="Permanent link">#</a></h3>
2049<p>The example below illustrates the usage of parameters where each value is replaced with the generic <code>?</code>-placeholder. Values are provided by calling <code>$statement-&gt;execute()</code> with a continuous, one-dimensional array that exactly match the number of question marks.</p>
2050<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2051<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT *</span>
2052<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example</span>
2053<span class="s2"> WHERE exampleID = ?</span>
2054<span class="s2"> OR bar IN (?, ?, ?, ?, ?)&quot;</span><span class="p">;</span>
2055<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2056<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span>
2057 <span class="nv">$exampleID</span><span class="p">,</span>
2058 <span class="nv">$list</span><span class="p">,</span> <span class="nv">$of</span><span class="p">,</span> <span class="nv">$values</span><span class="p">,</span> <span class="nv">$for</span><span class="p">,</span> <span class="nv">$bar</span>
2059<span class="p">]);</span>
2060<span class="k">while</span> <span class="p">(</span><span class="nv">$row</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchArray</span><span class="p">())</span> <span class="p">{</span>
2061 <span class="c1">// handle result</span>
2062<span class="p">}</span>
2063</code></pre></div>
0c5338dd
TD
2064<h3 id="fetching-a-single-result">Fetching a Single Result<a class="headerlink" href="#fetching-a-single-result" title="Permanent link">#</a></h3>
2065<div class="admonition danger">
2066<p class="admonition-title">Do not attempt to use <code>fetchSingleRow()</code> or <code>fetchSingleColumn()</code> if the result contains more than one row.</p>
2067</div>
2068<p>You can opt-in to retrieve only a single row from database and make use of shortcut methods to reduce the code that you have to write.</p>
2069<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2070<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT *</span>
2071<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example</span>
2072<span class="s2"> WHERE exampleID = ?&quot;</span><span class="p">;</span>
2073<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
2074<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span><span class="nv">$exampleID</span><span class="p">]);</span>
2075<span class="nv">$row</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchSingleRow</span><span class="p">();</span>
2076</code></pre></div>
0c5338dd
TD
2077<p>There are two distinct differences when comparing with the example on query parameters above:</p>
2078<ol>
2079<li>The method <code>prepareStatement()</code> receives a secondary parameter that will be appended to the query as <code>LIMIT 1</code>.</li>
2080<li>Data is read using <code>fetchSingleRow()</code> instead of <code>fetchArray()</code> or similar methods, that will read one result and close the cursor.</li>
2081</ol>
2082<h3 id="fetch-by-column">Fetch by Column<a class="headerlink" href="#fetch-by-column" title="Permanent link">#</a></h3>
2083<div class="admonition warning">
2084<p class="admonition-title">There is no way to return another column from the same row if you use <code>fetchColumn()</code> to retrieve data.</p>
2085</div>
2086<p>Fetching an array is only useful if there is going to be more than one column per result row, otherwise accessing the column directly is much more convenient and increases the code readability.</p>
2087<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2088<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT bar</span>
2089<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example&quot;</span><span class="p">;</span>
2090<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2091<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
2092<span class="k">while</span> <span class="p">(</span><span class="nv">$bar</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchColumn</span><span class="p">())</span> <span class="p">{</span>
2093 <span class="c1">// handle result</span>
2094<span class="p">}</span>
2095<span class="nv">$bar</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchSingleColumn</span><span class="p">();</span>
2096</code></pre></div>
0c5338dd
TD
2097<p>Similar to fetching a single row, you can also issue a query that will select a single row, but reads only one column from the result row.</p>
2098<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2099<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT bar</span>
2100<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example</span>
2101<span class="s2"> WHERE exampleID = ?&quot;</span><span class="p">;</span>
2102<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
2103<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span><span class="nv">$exampleID</span><span class="p">]);</span>
2104<span class="nv">$bar</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchSingleColumn</span><span class="p">();</span>
2105</code></pre></div>
0c5338dd
TD
2106<h3 id="fetching-all-results">Fetching All Results<a class="headerlink" href="#fetching-all-results" title="Permanent link">#</a></h3>
2107<p>If you want to fetch all results of a query but only store them in an array without directly processing them, in most cases, you can rely on built-in methods.</p>
2108<p>To fetch all rows of query, you can use <code>PDOStatement::fetchAll()</code> with <code>\PDO::FETCH_ASSOC</code> as the first parameter:</p>
2109<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2110<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT *</span>
2111<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example&quot;</span><span class="p">;</span>
2112<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2113<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
2114<span class="nv">$rows</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchAll</span><span class="p">(</span><span class="nx">\PDO</span><span class="o">::</span><span class="na">FETCH_ASSOC</span><span class="p">);</span>
2115</code></pre></div>
0c5338dd
TD
2116<p>As a result, you get an array containing associative arrays with the rows of the <code>wcf{WCF_N}_example</code> database table as content.</p>
2117<p>If you only want to fetch a list of the values of a certain column, you can use <code>\PDO::FETCH_COLUMN</code> as the first parameter:</p>
2118<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2119<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT exampleID</span>
2120<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example&quot;</span><span class="p">;</span>
2121<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2122<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
2123<span class="nv">$exampleIDs</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchAll</span><span class="p">(</span><span class="nx">\PDO</span><span class="o">::</span><span class="na">FETCH_COLUMN</span><span class="p">);</span>
2124</code></pre></div>
0c5338dd
TD
2125<p>As a result, you get an array with all <code>exampleID</code> values.</p>
2126<p>The <code>PreparedStatement</code> class adds an additional methods that covers another common use case in our code:
2127Fetching two columns and using the first column's value as the array key and the second column's value as the array value.
2128This case is covered by <code>PreparedStatement::fetchMap()</code>:</p>
2129<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2130<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT exampleID, userID</span>
2131<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example_mapping&quot;</span><span class="p">;</span>
2132<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2133<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
2134<span class="nv">$map</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchMap</span><span class="p">(</span><span class="s1">&#39;exampleID&#39;</span><span class="p">,</span> <span class="s1">&#39;userID&#39;</span><span class="p">);</span>
2135</code></pre></div>
0c5338dd
TD
2136<p><code>$map</code> is a one-dimensional array where each <code>exampleID</code> value maps to the corresponding <code>userID</code> value.</p>
2137<div class="admonition warning">
2138<p class="admonition-title">If there are multiple entries for a certain <code>exampleID</code> value with different <code>userID</code> values, the existing entry in the array will be overwritten and contain the last read value from the database table. Therefore, this method should generally only be used for unique combinations.</p>
2139</div>
2140<p>If you do not have a combination of columns with unique pairs of values, but you want to get a list of <code>userID</code> values with the same <code>exampleID</code>, you can set the third parameter of <code>fetchMap()</code> to <code>false</code> and get a list:</p>
2141<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2142<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT exampleID, userID</span>
2143<span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example_mapping&quot;</span><span class="p">;</span>
2144<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2145<span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>
2146<span class="nv">$map</span> <span class="o">=</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchMap</span><span class="p">(</span><span class="s1">&#39;exampleID&#39;</span><span class="p">,</span> <span class="s1">&#39;userID&#39;</span><span class="p">,</span> <span class="k">false</span><span class="p">);</span>
2147</code></pre></div>
0c5338dd
TD
2148<p>Now, as a result, you get a two-dimensional array with the array keys being the <code>exampleID</code> values and the array values being arrays with all <code>userID</code> values from rows with the respective <code>exampleID</code> value.</p>
2149<h2 id="building-complex-conditions">Building Complex Conditions<a class="headerlink" href="#building-complex-conditions" title="Permanent link">#</a></h2>
2150<p>Building conditional conditions can turn out to be a real mess and it gets even worse with SQL's <code>IN (…)</code> which requires as many placeholders as there will be values. The solutions is <code>PreparedStatementConditionBuilder</code>, a simple but useful helper class with a bulky name, it is also the class used when accessing <code>DatabaseObjecList::getConditionBuilder()</code>.</p>
2151<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2152<span class="nv">$conditions</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\wcf\system\database\util\PreparedStatementConditionBuilder</span><span class="p">();</span>
2153<span class="nv">$conditions</span><span class="o">-&gt;</span><span class="na">add</span><span class="p">(</span><span class="s2">&quot;exampleID = ?&quot;</span><span class="p">,</span> <span class="p">[</span><span class="nv">$exampleID</span><span class="p">]);</span>
2154<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">empty</span><span class="p">(</span><span class="nv">$valuesForBar</span><span class="p">))</span> <span class="p">{</span>
2155 <span class="nv">$conditions</span><span class="o">-&gt;</span><span class="na">add</span><span class="p">(</span><span class="s2">&quot;(bar IN (?) OR baz = ?)&quot;</span><span class="p">,</span> <span class="p">[</span><span class="nv">$valuesForBar</span><span class="p">,</span> <span class="nv">$baz</span><span class="p">]);</span>
2156<span class="p">}</span>
2157</code></pre></div>
0c5338dd
TD
2158<p>The <code>IN (?)</code> in the example above is automatically expanded to match the number of items contained in <code>$valuesForBar</code>. Be aware that the method will generate an invalid query if <code>$valuesForBar</code> is empty!</p>
2159<h2 id="insert-or-update-in-bulk">INSERT or UPDATE in Bulk<a class="headerlink" href="#insert-or-update-in-bulk" title="Permanent link">#</a></h2>
2160<p>Prepared statements not only protect against SQL injection by separating the logical query and the actual data, but also provides the ability to reuse the same query with different values. This leads to a performance improvement as the code does not have to transmit the query with for every data set and only has to parse and analyze the query once.</p>
2161<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2162<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;abc&#39;</span><span class="p">,</span> <span class="s1">&#39;def&#39;</span><span class="p">,</span> <span class="s1">&#39;ghi&#39;</span><span class="p">];</span>
2163
2164<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;INSERT INTO wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example</span>
2165<span class="s2"> (bar)</span>
2166<span class="s2"> VALUES (?)&quot;</span><span class="p">;</span>
2167<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2168
2169<span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">beginTransaction</span><span class="p">();</span>
2170<span class="k">foreach</span> <span class="p">(</span><span class="nv">$data</span> <span class="k">as</span> <span class="nv">$bar</span><span class="p">)</span> <span class="p">{</span>
2171 <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span><span class="nv">$bar</span><span class="p">]);</span>
2172<span class="p">}</span>
2173<span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">commitTransaction</span><span class="p">();</span>
2174</code></pre></div>
0c5338dd
TD
2175<p>It is generally advised to wrap bulk operations in a transaction as it allows the database to optimize the process, including fewer I/O operations.</p>
2176<div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2177<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
2178 <span class="mi">1</span> <span class="o">=&gt;</span> <span class="s1">&#39;abc&#39;</span><span class="p">,</span>
2179 <span class="mi">3</span> <span class="o">=&gt;</span> <span class="s1">&#39;def&#39;</span><span class="p">,</span>
2180 <span class="mi">4</span> <span class="o">=&gt;</span> <span class="s1">&#39;ghi&#39;</span>
2181<span class="p">];</span>
2182
2183<span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;UPDATE wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_example</span>
2184<span class="s2"> SET bar = ?</span>
2185<span class="s2"> WHERE exampleID = ?&quot;</span><span class="p">;</span>
2186<span class="nv">$statement</span> <span class="o">=</span> <span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2187
2188<span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">beginTransaction</span><span class="p">();</span>
2189<span class="k">foreach</span> <span class="p">(</span><span class="nv">$data</span> <span class="k">as</span> <span class="nv">$exampleID</span> <span class="o">=&gt;</span> <span class="nv">$bar</span><span class="p">)</span> <span class="p">{</span>
2190 <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span>
2191 <span class="nv">$bar</span><span class="p">,</span>
2192 <span class="nv">$exampleID</span>
2193 <span class="p">]);</span>
2194<span class="p">}</span>
2195<span class="nx">\wcf\system\WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">commitTransaction</span><span class="p">();</span>
2196</code></pre></div>
2197
4a5c32e1
WG
2198
2199
2200
2201<hr>
2202<div class="md-source-date">
2203 <small>
2204
2205 Last update: 2021-01-08
2206
2207 </small>
2208</div>
2209
2210
0c5338dd
TD
2211
2212
2213
2214
2215
2216
2217 </article>
2218 </div>
2219 </div>
fb962f09 2220
0c5338dd
TD
2221 </main>
2222
2223
2224<footer class="md-footer">
2225
2226 <nav class="md-footer__inner md-grid" aria-label="Footer">
2227
2228 <a href="../database-objects/" class="md-footer__link md-footer__link--prev" rel="prev">
2229 <div class="md-footer__button md-icon">
2230 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
2231 </div>
2232 <div class="md-footer__title">
2233 <div class="md-ellipsis">
2234 <span class="md-footer__direction">
2235 Previous
2236 </span>
2237 Database Objects
2238 </div>
2239 </div>
2240 </a>
2241
2242
2243 <a href="../exceptions/" class="md-footer__link md-footer__link--next" rel="next">
2244 <div class="md-footer__title">
2245 <div class="md-ellipsis">
2246 <span class="md-footer__direction">
2247 Next
2248 </span>
2249 Exceptions
2250 </div>
2251 </div>
2252 <div class="md-footer__button md-icon">
2253 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
2254 </div>
2255 </a>
2256
2257 </nav>
2258
2259 <div class="md-footer-meta md-typeset">
2260 <div class="md-footer-meta__inner md-grid">
2261 <div class="md-footer-copyright">
2262
2263 <div class="md-footer-copyright__highlight">
2264 Copyright © 2020 WoltLab GmbH
2265 </div>
2266
2267 Made with
2268 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2269 Material for MkDocs
2270 </a>
fb88dc6e 2271
0c5338dd
TD
2272 </div>
2273 <div class="md-footer-copyright">
2274 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2275 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2276</div>
2277 </div>
2278 </div>
2279</footer>
2280
2281 </div>
2282 <div class="md-dialog" data-md-component="dialog">
2283 <div class="md-dialog__inner md-typeset"></div>
2284 </div>
fb962f09 2285 <script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fe42c31b.min.js", "version": {"provider": "mike"}}</script>
0c5338dd
TD
2286
2287
fb962f09 2288 <script src="../../assets/javascripts/bundle.d892486b.min.js"></script>
0c5338dd
TD
2289
2290
2291 </body>
2292</html>