mirror of
https://github.com/php/php-src.git
synced 2025-08-19 17:04:47 +02:00
- Fixed bug #54929 (Parse error with single quote in sql comment)
This commit is contained in:
parent
53b6c0c8eb
commit
b86161982b
3 changed files with 256 additions and 73 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Generated by re2c 0.13.6.dev on Thu Nov 13 14:47:06 2008 */
|
/* Generated by re2c 0.13.5 on Sat Jun 4 18:42:25 2011 */
|
||||||
#line 1 "ext/pdo/pdo_sql_parser.re"
|
#line 1 "ext/pdo/pdo_sql_parser.re"
|
||||||
/*
|
/*
|
||||||
+----------------------------------------------------------------------+
|
+----------------------------------------------------------------------+
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
#define PDO_PARSER_EOI 4
|
#define PDO_PARSER_EOI 4
|
||||||
|
|
||||||
#define RET(i) {s->cur = cursor; return i; }
|
#define RET(i) {s->cur = cursor; return i; }
|
||||||
#define SKIP_ONE(i) {s->cur = s->tok + 1; return 1; }
|
#define SKIP_ONE(i) {s->cur = s->tok + 1; return i; }
|
||||||
|
|
||||||
#define YYCTYPE unsigned char
|
#define YYCTYPE unsigned char
|
||||||
#define YYCURSOR cursor
|
#define YYCURSOR cursor
|
||||||
|
@ -47,35 +47,40 @@ static int scan(Scanner *s)
|
||||||
char *cursor = s->cur;
|
char *cursor = s->cur;
|
||||||
|
|
||||||
s->tok = cursor;
|
s->tok = cursor;
|
||||||
#line 55 "ext/pdo/pdo_sql_parser.re"
|
#line 56 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#line 55 "ext/pdo/pdo_sql_parser.c"
|
#line 55 "ext/pdo/pdo_sql_parser.c"
|
||||||
{
|
{
|
||||||
YYCTYPE yych;
|
YYCTYPE yych;
|
||||||
|
unsigned int yyaccept = 0;
|
||||||
|
|
||||||
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
switch (yych) {
|
switch (yych) {
|
||||||
case 0x00: goto yy11;
|
case 0x00: goto yy13;
|
||||||
case '"': goto yy2;
|
case '"': goto yy2;
|
||||||
case '\'': goto yy4;
|
case '\'': goto yy4;
|
||||||
|
case '-': goto yy10;
|
||||||
|
case '/': goto yy8;
|
||||||
case ':': goto yy5;
|
case ':': goto yy5;
|
||||||
case '?': goto yy6;
|
case '?': goto yy6;
|
||||||
default: goto yy8;
|
default: goto yy11;
|
||||||
}
|
}
|
||||||
yy2:
|
yy2:
|
||||||
|
yyaccept = 0;
|
||||||
yych = *(YYMARKER = ++YYCURSOR);
|
yych = *(YYMARKER = ++YYCURSOR);
|
||||||
if (yych >= 0x01) goto yy26;
|
if (yych >= 0x01) goto yy43;
|
||||||
yy3:
|
yy3:
|
||||||
#line 63 "ext/pdo/pdo_sql_parser.re"
|
#line 64 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ SKIP_ONE(PDO_PARSER_TEXT); }
|
{ SKIP_ONE(PDO_PARSER_TEXT); }
|
||||||
#line 75 "ext/pdo/pdo_sql_parser.c"
|
#line 79 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy4:
|
yy4:
|
||||||
|
yyaccept = 0;
|
||||||
yych = *(YYMARKER = ++YYCURSOR);
|
yych = *(YYMARKER = ++YYCURSOR);
|
||||||
if (yych <= 0x00) goto yy3;
|
if (yych <= 0x00) goto yy3;
|
||||||
goto yy20;
|
goto yy37;
|
||||||
yy5:
|
yy5:
|
||||||
yych = *++YYCURSOR;
|
yych = *++YYCURSOR;
|
||||||
switch (yych) {
|
switch (yych) {
|
||||||
|
@ -141,23 +146,57 @@ yy5:
|
||||||
case 'w':
|
case 'w':
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'y':
|
case 'y':
|
||||||
case 'z': goto yy16;
|
case 'z': goto yy33;
|
||||||
case ':':
|
case ':':
|
||||||
case '?': goto yy13;
|
case '?': goto yy30;
|
||||||
default: goto yy3;
|
default: goto yy3;
|
||||||
}
|
}
|
||||||
yy6:
|
yy6:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
switch ((yych = *YYCURSOR)) {
|
switch ((yych = *YYCURSOR)) {
|
||||||
case ':':
|
case ':':
|
||||||
case '?': goto yy13;
|
case '?': goto yy30;
|
||||||
default: goto yy7;
|
default: goto yy7;
|
||||||
}
|
}
|
||||||
yy7:
|
yy7:
|
||||||
#line 62 "ext/pdo/pdo_sql_parser.re"
|
#line 63 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_BIND_POS); }
|
{ RET(PDO_PARSER_BIND_POS); }
|
||||||
#line 160 "ext/pdo/pdo_sql_parser.c"
|
#line 165 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy8:
|
yy8:
|
||||||
|
++YYCURSOR;
|
||||||
|
switch ((yych = *YYCURSOR)) {
|
||||||
|
case '*': goto yy20;
|
||||||
|
default: goto yy12;
|
||||||
|
}
|
||||||
|
yy9:
|
||||||
|
#line 66 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
|
#line 175 "ext/pdo/pdo_sql_parser.c"
|
||||||
|
yy10:
|
||||||
|
yych = *++YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case '-': goto yy15;
|
||||||
|
default: goto yy12;
|
||||||
|
}
|
||||||
|
yy11:
|
||||||
|
++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
yy12:
|
||||||
|
switch (yych) {
|
||||||
|
case 0x00:
|
||||||
|
case '"':
|
||||||
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy9;
|
||||||
|
default: goto yy11;
|
||||||
|
}
|
||||||
|
yy13:
|
||||||
|
++YYCURSOR;
|
||||||
|
#line 67 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
{ RET(PDO_PARSER_EOI); }
|
||||||
|
#line 199 "ext/pdo/pdo_sql_parser.c"
|
||||||
|
yy15:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
|
@ -166,32 +205,97 @@ yy8:
|
||||||
case '"':
|
case '"':
|
||||||
case '\'':
|
case '\'':
|
||||||
case ':':
|
case ':':
|
||||||
case '?': goto yy10;
|
case '?': goto yy18;
|
||||||
default: goto yy8;
|
case '\n':
|
||||||
|
case '\r': goto yy11;
|
||||||
|
default: goto yy15;
|
||||||
}
|
}
|
||||||
yy10:
|
yy17:
|
||||||
#line 64 "ext/pdo/pdo_sql_parser.re"
|
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
|
||||||
#line 176 "ext/pdo/pdo_sql_parser.c"
|
|
||||||
yy11:
|
|
||||||
++YYCURSOR;
|
|
||||||
#line 65 "ext/pdo/pdo_sql_parser.re"
|
#line 65 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_EOI); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 181 "ext/pdo/pdo_sql_parser.c"
|
#line 217 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy13:
|
yy18:
|
||||||
|
++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case '\n':
|
||||||
|
case '\r': goto yy17;
|
||||||
|
default: goto yy18;
|
||||||
|
}
|
||||||
|
yy20:
|
||||||
|
yyaccept = 1;
|
||||||
|
YYMARKER = ++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case 0x00:
|
||||||
|
case '"':
|
||||||
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy22;
|
||||||
|
case '*': goto yy24;
|
||||||
|
default: goto yy20;
|
||||||
|
}
|
||||||
|
yy22:
|
||||||
|
++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case '*': goto yy27;
|
||||||
|
default: goto yy22;
|
||||||
|
}
|
||||||
|
yy24:
|
||||||
|
yyaccept = 1;
|
||||||
|
YYMARKER = ++YYCURSOR;
|
||||||
|
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case 0x00:
|
||||||
|
case '"':
|
||||||
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy22;
|
||||||
|
case '*': goto yy24;
|
||||||
|
case '/': goto yy26;
|
||||||
|
default: goto yy20;
|
||||||
|
}
|
||||||
|
yy26:
|
||||||
|
yych = *++YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case 0x00:
|
||||||
|
case '"':
|
||||||
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy17;
|
||||||
|
default: goto yy11;
|
||||||
|
}
|
||||||
|
yy27:
|
||||||
|
++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
switch (yych) {
|
||||||
|
case '*': goto yy27;
|
||||||
|
case '/': goto yy29;
|
||||||
|
default: goto yy22;
|
||||||
|
}
|
||||||
|
yy29:
|
||||||
|
yych = *++YYCURSOR;
|
||||||
|
goto yy17;
|
||||||
|
yy30:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
switch (yych) {
|
switch (yych) {
|
||||||
case ':':
|
case ':':
|
||||||
case '?': goto yy13;
|
case '?': goto yy30;
|
||||||
default: goto yy15;
|
default: goto yy32;
|
||||||
}
|
}
|
||||||
yy15:
|
yy32:
|
||||||
#line 60 "ext/pdo/pdo_sql_parser.re"
|
#line 61 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 194 "ext/pdo/pdo_sql_parser.c"
|
#line 298 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy16:
|
yy33:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
|
@ -258,62 +362,65 @@ yy16:
|
||||||
case 'w':
|
case 'w':
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'y':
|
case 'y':
|
||||||
case 'z': goto yy16;
|
case 'z': goto yy33;
|
||||||
default: goto yy18;
|
default: goto yy35;
|
||||||
}
|
}
|
||||||
yy18:
|
yy35:
|
||||||
#line 61 "ext/pdo/pdo_sql_parser.re"
|
#line 62 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_BIND); }
|
{ RET(PDO_PARSER_BIND); }
|
||||||
#line 268 "ext/pdo/pdo_sql_parser.c"
|
#line 372 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy19:
|
yy36:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
yy20:
|
yy37:
|
||||||
switch (yych) {
|
switch (yych) {
|
||||||
case 0x00: goto yy21;
|
case 0x00: goto yy38;
|
||||||
case '\'': goto yy23;
|
case '\'': goto yy40;
|
||||||
case '\\': goto yy22;
|
case '\\': goto yy39;
|
||||||
default: goto yy19;
|
default: goto yy36;
|
||||||
}
|
}
|
||||||
yy21:
|
yy38:
|
||||||
YYCURSOR = YYMARKER;
|
YYCURSOR = YYMARKER;
|
||||||
goto yy3;
|
switch (yyaccept) {
|
||||||
yy22:
|
case 0: goto yy3;
|
||||||
|
case 1: goto yy9;
|
||||||
|
}
|
||||||
|
yy39:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if (yych <= 0x00) goto yy21;
|
if (yych <= 0x00) goto yy38;
|
||||||
goto yy19;
|
goto yy36;
|
||||||
yy23:
|
yy40:
|
||||||
|
++YYCURSOR;
|
||||||
|
#line 60 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
|
#line 400 "ext/pdo/pdo_sql_parser.c"
|
||||||
|
yy42:
|
||||||
|
++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
yy43:
|
||||||
|
switch (yych) {
|
||||||
|
case 0x00: goto yy38;
|
||||||
|
case '"': goto yy45;
|
||||||
|
case '\\': goto yy44;
|
||||||
|
default: goto yy42;
|
||||||
|
}
|
||||||
|
yy44:
|
||||||
|
++YYCURSOR;
|
||||||
|
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
if (yych <= 0x00) goto yy38;
|
||||||
|
goto yy42;
|
||||||
|
yy45:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
#line 59 "ext/pdo/pdo_sql_parser.re"
|
#line 59 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 293 "ext/pdo/pdo_sql_parser.c"
|
#line 422 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy25:
|
|
||||||
++YYCURSOR;
|
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
|
||||||
yych = *YYCURSOR;
|
|
||||||
yy26:
|
|
||||||
switch (yych) {
|
|
||||||
case 0x00: goto yy21;
|
|
||||||
case '"': goto yy28;
|
|
||||||
case '\\': goto yy27;
|
|
||||||
default: goto yy25;
|
|
||||||
}
|
|
||||||
yy27:
|
|
||||||
++YYCURSOR;
|
|
||||||
if (YYLIMIT <= YYCURSOR) YYFILL(1);
|
|
||||||
yych = *YYCURSOR;
|
|
||||||
if (yych <= 0x00) goto yy21;
|
|
||||||
goto yy25;
|
|
||||||
yy28:
|
|
||||||
++YYCURSOR;
|
|
||||||
#line 58 "ext/pdo/pdo_sql_parser.re"
|
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
|
||||||
#line 315 "ext/pdo/pdo_sql_parser.c"
|
|
||||||
}
|
}
|
||||||
#line 66 "ext/pdo/pdo_sql_parser.re"
|
#line 68 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#define PDO_PARSER_EOI 4
|
#define PDO_PARSER_EOI 4
|
||||||
|
|
||||||
#define RET(i) {s->cur = cursor; return i; }
|
#define RET(i) {s->cur = cursor; return i; }
|
||||||
#define SKIP_ONE(i) {s->cur = s->tok + 1; return 1; }
|
#define SKIP_ONE(i) {s->cur = s->tok + 1; return i; }
|
||||||
|
|
||||||
#define YYCTYPE unsigned char
|
#define YYCTYPE unsigned char
|
||||||
#define YYCURSOR cursor
|
#define YYCURSOR cursor
|
||||||
|
@ -48,6 +48,7 @@ static int scan(Scanner *s)
|
||||||
/*!re2c
|
/*!re2c
|
||||||
BINDCHR = [:][a-zA-Z0-9_]+;
|
BINDCHR = [:][a-zA-Z0-9_]+;
|
||||||
QUESTION = [?];
|
QUESTION = [?];
|
||||||
|
COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--"[^\r\n]*);
|
||||||
SPECIALS = [:?"'];
|
SPECIALS = [:?"'];
|
||||||
MULTICHAR = [:?];
|
MULTICHAR = [:?];
|
||||||
EOF = [\000];
|
EOF = [\000];
|
||||||
|
@ -61,6 +62,7 @@ static int scan(Scanner *s)
|
||||||
BINDCHR { RET(PDO_PARSER_BIND); }
|
BINDCHR { RET(PDO_PARSER_BIND); }
|
||||||
QUESTION { RET(PDO_PARSER_BIND_POS); }
|
QUESTION { RET(PDO_PARSER_BIND_POS); }
|
||||||
SPECIALS { SKIP_ONE(PDO_PARSER_TEXT); }
|
SPECIALS { SKIP_ONE(PDO_PARSER_TEXT); }
|
||||||
|
COMMENTS { RET(PDO_PARSER_TEXT); }
|
||||||
(ANYNOEOF\SPECIALS)+ { RET(PDO_PARSER_TEXT); }
|
(ANYNOEOF\SPECIALS)+ { RET(PDO_PARSER_TEXT); }
|
||||||
EOF { RET(PDO_PARSER_EOI); }
|
EOF { RET(PDO_PARSER_EOI); }
|
||||||
*/
|
*/
|
||||||
|
|
74
ext/pdo_mysql/tests/bug54929.phpt
Normal file
74
ext/pdo_mysql/tests/bug54929.phpt
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
--TEST--
|
||||||
|
Bug #54929 (Parse error with single quote in sql comment (pdo-mysql))
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
|
||||||
|
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
|
||||||
|
MySQLPDOTest::skip();
|
||||||
|
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
|
||||||
|
|
||||||
|
$pdodb = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
|
||||||
|
|
||||||
|
|
||||||
|
function testQuery($query) {
|
||||||
|
global $pdodb;
|
||||||
|
$stmt = $pdodb->prepare($query);
|
||||||
|
|
||||||
|
if (!$stmt->execute(array("foo"))) {
|
||||||
|
var_dump($stmt->errorInfo());
|
||||||
|
} else{
|
||||||
|
var_dump($stmt->fetch(PDO::FETCH_ASSOC));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testQuery("/* ' */ select ? as f1 /* ' */");
|
||||||
|
testQuery("/* '-- */ select ? as f1 /* *' */");
|
||||||
|
testQuery("/* ' */ select ? as f1 --';");
|
||||||
|
testQuery("/* ' */ select ? as f1 -- 'a;");
|
||||||
|
testQuery("/*'**/ select ? as f1 /* ' */");
|
||||||
|
testQuery("/*'***/ select ? as f1 /* ' */");
|
||||||
|
testQuery("/*'**a ***b / ****
|
||||||
|
******
|
||||||
|
**/ select ? as f1 /* ' */");
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
array(1) {
|
||||||
|
["f1"]=>
|
||||||
|
string(3) "foo"
|
||||||
|
}
|
||||||
|
array(1) {
|
||||||
|
["f1"]=>
|
||||||
|
string(3) "foo"
|
||||||
|
}
|
||||||
|
|
||||||
|
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '--'' at line 1 in %s on line %d
|
||||||
|
array(3) {
|
||||||
|
[0]=>
|
||||||
|
string(5) "42000"
|
||||||
|
[1]=>
|
||||||
|
int(1064)
|
||||||
|
[2]=>
|
||||||
|
string(149) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '--'' at line 1"
|
||||||
|
}
|
||||||
|
array(1) {
|
||||||
|
["f1"]=>
|
||||||
|
string(3) "foo"
|
||||||
|
}
|
||||||
|
array(1) {
|
||||||
|
["f1"]=>
|
||||||
|
string(3) "foo"
|
||||||
|
}
|
||||||
|
array(1) {
|
||||||
|
["f1"]=>
|
||||||
|
string(3) "foo"
|
||||||
|
}
|
||||||
|
array(1) {
|
||||||
|
["f1"]=>
|
||||||
|
string(3) "foo"
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue