@@ -124,32 +124,77 @@ if (!function_exists('mysqli_stmt_get_result'))
124
124
if (true !== ($ tmp = mysqli_stmt_bind_result ($ stmt , $ id , $ label )))
125
125
printf ("[035] Expecting boolean/true, got %s/%s \n" , gettype ($ tmp ), var_export ($ tmp , 1 ));
126
126
127
- if (!is_object ($ tmp = $ result = mysqli_stmt_get_result ($ stmt )))
128
- printf ("[036] Expecting array, got %s/%s, [%d] %s \n" ,
129
- gettype ($ tmp ), var_export ($ tmp , 1 ),
130
- mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
131
-
132
- if (false !== ($ tmp = mysqli_stmt_fetch ($ stmt )))
133
- printf ("[037] Expecting boolean/false, got %s/%s, [%d] %s \n" ,
134
- gettype ($ tmp ), $ tmp , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
135
-
136
- printf ("[038] [%d] [%s] \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
137
- printf ("[039] [%d] [%s] \n" , mysqli_errno ($ link ), mysqli_error ($ link ));
138
- while ($ row = mysqli_fetch_assoc ($ result )) {
139
- var_dump ($ row );
140
- }
141
- mysqli_free_result ($ result );
127
+ // get_result cannot be used in PS cursor mode
128
+ if (!$ stmt = mysqli_stmt_init ($ link ))
129
+ printf ("[030] [%d] %s \n" , mysqli_errno ($ link ), mysqli_error ($ link ));
130
+
131
+ if (!mysqli_stmt_prepare ($ stmt , "SELECT id, label FROM test ORDER BY id LIMIT 2 " ))
132
+ printf ("[031] [%d] %s \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
133
+
134
+ if (!mysqli_stmt_attr_set ($ stmt , MYSQLI_STMT_ATTR_CURSOR_TYPE , MYSQLI_CURSOR_TYPE_READ_ONLY ))
135
+ printf ("[032] [%d] %s \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
136
+
137
+ if (!mysqli_stmt_execute ($ stmt ))
138
+ printf ("[033] [%d] %s \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
139
+
140
+ mysqli_report (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
141
+ try {
142
+ $ res = mysqli_stmt_get_result ($ stmt );
143
+ // we expect no segfault if we try to fetch a row because get_result should throw an error or return false
144
+ mysqli_fetch_assoc ($ res );
145
+ } catch (\mysqli_sql_exception $ e ) {
146
+ echo $ e ->getMessage () . "\n" ;
147
+ }
148
+
149
+ try {
150
+ $ res = $ stmt ->get_result ();
151
+ // we expect no segfault if we try to fetch a row because get_result should throw an error or return false
152
+ $ res ->fetch_assoc ();
153
+ } catch (\mysqli_sql_exception $ e ) {
154
+ echo $ e ->getMessage () . "\n" ;
155
+ }
156
+ mysqli_report (MYSQLI_REPORT_OFF );
157
+
158
+ if (!$ stmt = mysqli_stmt_init ($ link ))
159
+ printf ("[034] [%d] %s \n" , mysqli_errno ($ link ), mysqli_error ($ link ));
160
+
161
+ if (!mysqli_stmt_prepare ($ stmt , "SELECT id, label FROM test ORDER BY id LIMIT 2 " ))
162
+ printf ("[035] [%d] %s \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
163
+
164
+ if (!mysqli_stmt_execute ($ stmt ))
165
+ printf ("[036] [%d] %s \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
166
+
167
+ $ id = NULL ;
168
+ $ label = NULL ;
169
+ if (true !== ($ tmp = mysqli_stmt_bind_result ($ stmt , $ id , $ label )))
170
+ printf ("[037] Expecting boolean/true, got %s/%s \n" , gettype ($ tmp ), var_export ($ tmp , 1 ));
171
+
172
+ if (!is_object ($ tmp = $ result = mysqli_stmt_get_result ($ stmt )))
173
+ printf ("[038] Expecting array, got %s/%s, [%d] %s \n" ,
174
+ gettype ($ tmp ), var_export ($ tmp , 1 ),
175
+ mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
176
+
177
+ if (false !== ($ tmp = mysqli_stmt_fetch ($ stmt )))
178
+ printf ("[039] Expecting boolean/false, got %s/%s, [%d] %s \n" ,
179
+ gettype ($ tmp ), $ tmp , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
180
+
181
+ printf ("[040] [%d] [%s] \n" , mysqli_stmt_errno ($ stmt ), mysqli_stmt_error ($ stmt ));
182
+ printf ("[041] [%d] [%s] \n" , mysqli_errno ($ link ), mysqli_error ($ link ));
183
+ while ($ row = mysqli_fetch_assoc ($ result )) {
184
+ var_dump ($ row );
185
+ }
186
+ mysqli_free_result ($ result );
142
187
143
188
if (!mysqli_kill ($ link , mysqli_thread_id ($ link )))
144
- printf ("[040 ] [%d] %s \n" , mysqli_errno ($ link ), mysqli_error ($ link ));
189
+ printf ("[042 ] [%d] %s \n" , mysqli_errno ($ link ), mysqli_error ($ link ));
145
190
146
191
if (false !== ($ tmp = mysqli_stmt_get_result ($ stmt )))
147
- printf ("[041 ] Expecting false, got %s/%s \n" , gettype ($ tmp ), var_export ($ tmp , 1 ));
192
+ printf ("[043 ] Expecting false, got %s/%s \n" , gettype ($ tmp ), var_export ($ tmp , 1 ));
148
193
149
194
mysqli_stmt_close ($ stmt );
150
195
151
196
if (false !== ($ tmp = mysqli_stmt_fetch ($ stmt )))
152
- printf ("[042 ] Expecting false, got %s/%s \n" , gettype ($ tmp ), var_export ($ tmp , 1 ));
197
+ printf ("[044 ] Expecting false, got %s/%s \n" , gettype ($ tmp ), var_export ($ tmp , 1 ));
153
198
154
199
mysqli_close ($ link );
155
200
@@ -168,8 +213,10 @@ Warning: mysqli_stmt_fetch(): invalid object or resource mysqli_stmt
168
213
169
214
Warning: mysqli_stmt_get_result(): invalid object or resource mysqli_stmt
170
215
in %s on line %d
171
- [038] [2014] [Commands out of sync; you can't run this command now]
172
- [039] [0] []
216
+ mysqli_stmt_get_result() cannot be used with cursors
217
+ get_result() cannot be used with cursors
218
+ [040] [2014] [Commands out of sync; you can't run this command now]
219
+ [041] [0] []
173
220
array(2) {
174
221
["id"]=>
175
222
int(1)
0 commit comments