felipe                                   Sat, 04 Jun 2011 22:54:40 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=311812

Log:
- Fixed bug #54929 (Parse error with single quote in sql comment)

Bug: http://bugs.php.net/54929 (Closed) Parse error with single quote in sql 
comment
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.c
    U   php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.re
    A   php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/bug54929.phpt
    U   php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.c
    U   php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.re
    A   php/php-src/branches/PHP_5_4/ext/pdo_mysql/tests/bug54929.phpt
    U   php/php-src/trunk/ext/pdo/pdo_sql_parser.c
    U   php/php-src/trunk/ext/pdo/pdo_sql_parser.re
    A   php/php-src/trunk/ext/pdo_mysql/tests/bug54929.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/branches/PHP_5_3/NEWS	2011-06-04 22:54:40 UTC (rev 311812)
@@ -118,6 +118,7 @@
     and range). (nihen at megabbs dot com, Andrey)

 - PDO extension:
+  . Fixed bug #54929 (Parse error with single quote in sql comment). (Felipe)
   . Fixed bug #52104 (bindColumn creates Warning regardless of ATTR_ERRMODE
     settings). (Ilia)


Modified: php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.c	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.c	2011-06-04 22:54:40 UTC (rev 311812)
@@ -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"
 /*
   +----------------------------------------------------------------------+
@@ -30,7 +30,7 @@
 #define PDO_PARSER_EOI 4

 #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 YYCURSOR        cursor
@@ -47,35 +47,40 @@
 	char *cursor = s->cur;

 	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"
 {
 	YYCTYPE yych;
+	unsigned int yyaccept = 0;

 	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
 	yych = *YYCURSOR;
 	switch (yych) {
-	case 0x00:	goto yy11;
+	case 0x00:	goto yy13;
 	case '"':	goto yy2;
 	case '\'':	goto yy4;
+	case '-':	goto yy10;
+	case '/':	goto yy8;
 	case ':':	goto yy5;
 	case '?':	goto yy6;
-	default:	goto yy8;
+	default:	goto yy11;
 	}
 yy2:
+	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych >= 0x01) goto yy26;
+	if (yych >= 0x01) goto yy43;
 yy3:
-#line 63 "ext/pdo/pdo_sql_parser.re"
+#line 64 "ext/pdo/pdo_sql_parser.re"
 	{ SKIP_ONE(PDO_PARSER_TEXT); }
-#line 75 "ext/pdo/pdo_sql_parser.c"
+#line 79 "ext/pdo/pdo_sql_parser.c"
 yy4:
+	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
 	if (yych <= 0x00) goto yy3;
-	goto yy20;
+	goto yy37;
 yy5:
 	yych = *++YYCURSOR;
 	switch (yych) {
@@ -141,61 +146,160 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy16;
+	case 'z':	goto yy33;
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy30;
 	default:	goto yy3;
 	}
 yy6:
 	++YYCURSOR;
 	switch ((yych = *YYCURSOR)) {
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy30;
 	default:	goto yy7;
 	}
 yy7:
-#line 62 "ext/pdo/pdo_sql_parser.re"
+#line 63 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_BIND_POS); }
-#line 160 "ext/pdo/pdo_sql_parser.c"
+#line 165 "ext/pdo/pdo_sql_parser.c"
 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 yy10;
-	default:	goto yy8;
+	case '?':	goto yy9;
+	default:	goto yy11;
 	}
-yy10:
-#line 64 "ext/pdo/pdo_sql_parser.re"
-	{ RET(PDO_PARSER_TEXT); }
-#line 176 "ext/pdo/pdo_sql_parser.c"
-yy11:
+yy13:
 	++YYCURSOR;
-#line 65 "ext/pdo/pdo_sql_parser.re"
+#line 67 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_EOI); }
-#line 181 "ext/pdo/pdo_sql_parser.c"
-yy13:
+#line 199 "ext/pdo/pdo_sql_parser.c"
+yy15:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	switch (yych) {
+	case 0x00:
+	case '"':
+	case '\'':
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy18;
+	case '\n':
+	case '\r':	goto yy11;
 	default:	goto yy15;
 	}
-yy15:
-#line 60 "ext/pdo/pdo_sql_parser.re"
+yy17:
+#line 65 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 194 "ext/pdo/pdo_sql_parser.c"
-yy16:
+#line 217 "ext/pdo/pdo_sql_parser.c"
+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;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
+	yych = *YYCURSOR;
+	switch (yych) {
+	case ':':
+	case '?':	goto yy30;
+	default:	goto yy32;
+	}
+yy32:
+#line 61 "ext/pdo/pdo_sql_parser.re"
+	{ RET(PDO_PARSER_TEXT); }
+#line 298 "ext/pdo/pdo_sql_parser.c"
+yy33:
+	++YYCURSOR;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
+	yych = *YYCURSOR;
+	switch (yych) {
 	case '0':
 	case '1':
 	case '2':
@@ -258,62 +362,65 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy16;
-	default:	goto yy18;
+	case 'z':	goto yy33;
+	default:	goto yy35;
 	}
-yy18:
-#line 61 "ext/pdo/pdo_sql_parser.re"
+yy35:
+#line 62 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_BIND); }
-#line 268 "ext/pdo/pdo_sql_parser.c"
-yy19:
+#line 372 "ext/pdo/pdo_sql_parser.c"
+yy36:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy20:
+yy37:
 	switch (yych) {
-	case 0x00:	goto yy21;
-	case '\'':	goto yy23;
-	case '\\':	goto yy22;
-	default:	goto yy19;
+	case 0x00:	goto yy38;
+	case '\'':	goto yy40;
+	case '\\':	goto yy39;
+	default:	goto yy36;
 	}
-yy21:
+yy38:
 	YYCURSOR = YYMARKER;
-	goto yy3;
-yy22:
+	switch (yyaccept) {
+	case 0: 	goto yy3;
+	case 1: 	goto yy9;
+	}
+yy39:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= 0x00) goto yy21;
-	goto yy19;
-yy23:
+	if (yych <= 0x00) goto yy38;
+	goto yy36;
+yy40:
 	++YYCURSOR;
-#line 59 "ext/pdo/pdo_sql_parser.re"
+#line 60 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 293 "ext/pdo/pdo_sql_parser.c"
-yy25:
+#line 400 "ext/pdo/pdo_sql_parser.c"
+yy42:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy26:
+yy43:
 	switch (yych) {
-	case 0x00:	goto yy21;
-	case '"':	goto yy28;
-	case '\\':	goto yy27;
-	default:	goto yy25;
+	case 0x00:	goto yy38;
+	case '"':	goto yy45;
+	case '\\':	goto yy44;
+	default:	goto yy42;
 	}
-yy27:
+yy44:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= 0x00) goto yy21;
-	goto yy25;
-yy28:
+	if (yych <= 0x00) goto yy38;
+	goto yy42;
+yy45:
 	++YYCURSOR;
-#line 58 "ext/pdo/pdo_sql_parser.re"
+#line 59 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 315 "ext/pdo/pdo_sql_parser.c"
+#line 422 "ext/pdo/pdo_sql_parser.c"
 }
-#line 66 "ext/pdo/pdo_sql_parser.re"
+#line 68 "ext/pdo/pdo_sql_parser.re"

 }


Modified: php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.re
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.re	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/branches/PHP_5_3/ext/pdo/pdo_sql_parser.re	2011-06-04 22:54:40 UTC (rev 311812)
@@ -28,7 +28,7 @@
 #define PDO_PARSER_EOI 4

 #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 YYCURSOR        cursor
@@ -48,6 +48,7 @@
 	/*!re2c
 	BINDCHR		= [:][a-zA-Z0-9_]+;
 	QUESTION	= [?];
+	COMMENTS	= ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--"[^\r\n]*);
 	SPECIALS	= [:?"'];
 	MULTICHAR	= [:?];
 	EOF			= [\000];
@@ -61,6 +62,7 @@
 		BINDCHR									{ RET(PDO_PARSER_BIND); }
 		QUESTION								{ RET(PDO_PARSER_BIND_POS); }
 		SPECIALS								{ SKIP_ONE(PDO_PARSER_TEXT); }
+		COMMENTS								{ RET(PDO_PARSER_TEXT); }
 		(ANYNOEOF\SPECIALS)+ 					{ RET(PDO_PARSER_TEXT); }
 		EOF										{ RET(PDO_PARSER_EOI); }
 	*/

Added: php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/bug54929.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/bug54929.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/pdo_mysql/tests/bug54929.phpt	2011-06-04 22:54:40 UTC (rev 311812)
@@ -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"
+}

Modified: php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.c	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.c	2011-06-04 22:54:40 UTC (rev 311812)
@@ -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"
 /*
   +----------------------------------------------------------------------+
@@ -30,7 +30,7 @@
 #define PDO_PARSER_EOI 4

 #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 YYCURSOR        cursor
@@ -47,35 +47,40 @@
 	char *cursor = s->cur;

 	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"
 {
 	YYCTYPE yych;
+	unsigned int yyaccept = 0;

 	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
 	yych = *YYCURSOR;
 	switch (yych) {
-	case 0x00:	goto yy11;
+	case 0x00:	goto yy13;
 	case '"':	goto yy2;
 	case '\'':	goto yy4;
+	case '-':	goto yy10;
+	case '/':	goto yy8;
 	case ':':	goto yy5;
 	case '?':	goto yy6;
-	default:	goto yy8;
+	default:	goto yy11;
 	}
 yy2:
+	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych >= 0x01) goto yy26;
+	if (yych >= 0x01) goto yy43;
 yy3:
-#line 63 "ext/pdo/pdo_sql_parser.re"
+#line 64 "ext/pdo/pdo_sql_parser.re"
 	{ SKIP_ONE(PDO_PARSER_TEXT); }
-#line 75 "ext/pdo/pdo_sql_parser.c"
+#line 79 "ext/pdo/pdo_sql_parser.c"
 yy4:
+	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
 	if (yych <= 0x00) goto yy3;
-	goto yy20;
+	goto yy37;
 yy5:
 	yych = *++YYCURSOR;
 	switch (yych) {
@@ -141,61 +146,160 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy16;
+	case 'z':	goto yy33;
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy30;
 	default:	goto yy3;
 	}
 yy6:
 	++YYCURSOR;
 	switch ((yych = *YYCURSOR)) {
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy30;
 	default:	goto yy7;
 	}
 yy7:
-#line 62 "ext/pdo/pdo_sql_parser.re"
+#line 63 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_BIND_POS); }
-#line 160 "ext/pdo/pdo_sql_parser.c"
+#line 165 "ext/pdo/pdo_sql_parser.c"
 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 yy10;
-	default:	goto yy8;
+	case '?':	goto yy9;
+	default:	goto yy11;
 	}
-yy10:
-#line 64 "ext/pdo/pdo_sql_parser.re"
-	{ RET(PDO_PARSER_TEXT); }
-#line 176 "ext/pdo/pdo_sql_parser.c"
-yy11:
+yy13:
 	++YYCURSOR;
-#line 65 "ext/pdo/pdo_sql_parser.re"
+#line 67 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_EOI); }
-#line 181 "ext/pdo/pdo_sql_parser.c"
-yy13:
+#line 199 "ext/pdo/pdo_sql_parser.c"
+yy15:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	switch (yych) {
+	case 0x00:
+	case '"':
+	case '\'':
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy18;
+	case '\n':
+	case '\r':	goto yy11;
 	default:	goto yy15;
 	}
-yy15:
-#line 60 "ext/pdo/pdo_sql_parser.re"
+yy17:
+#line 65 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 194 "ext/pdo/pdo_sql_parser.c"
-yy16:
+#line 217 "ext/pdo/pdo_sql_parser.c"
+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;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
+	yych = *YYCURSOR;
+	switch (yych) {
+	case ':':
+	case '?':	goto yy30;
+	default:	goto yy32;
+	}
+yy32:
+#line 61 "ext/pdo/pdo_sql_parser.re"
+	{ RET(PDO_PARSER_TEXT); }
+#line 298 "ext/pdo/pdo_sql_parser.c"
+yy33:
+	++YYCURSOR;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
+	yych = *YYCURSOR;
+	switch (yych) {
 	case '0':
 	case '1':
 	case '2':
@@ -258,62 +362,65 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy16;
-	default:	goto yy18;
+	case 'z':	goto yy33;
+	default:	goto yy35;
 	}
-yy18:
-#line 61 "ext/pdo/pdo_sql_parser.re"
+yy35:
+#line 62 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_BIND); }
-#line 268 "ext/pdo/pdo_sql_parser.c"
-yy19:
+#line 372 "ext/pdo/pdo_sql_parser.c"
+yy36:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy20:
+yy37:
 	switch (yych) {
-	case 0x00:	goto yy21;
-	case '\'':	goto yy23;
-	case '\\':	goto yy22;
-	default:	goto yy19;
+	case 0x00:	goto yy38;
+	case '\'':	goto yy40;
+	case '\\':	goto yy39;
+	default:	goto yy36;
 	}
-yy21:
+yy38:
 	YYCURSOR = YYMARKER;
-	goto yy3;
-yy22:
+	switch (yyaccept) {
+	case 0: 	goto yy3;
+	case 1: 	goto yy9;
+	}
+yy39:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= 0x00) goto yy21;
-	goto yy19;
-yy23:
+	if (yych <= 0x00) goto yy38;
+	goto yy36;
+yy40:
 	++YYCURSOR;
-#line 59 "ext/pdo/pdo_sql_parser.re"
+#line 60 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 293 "ext/pdo/pdo_sql_parser.c"
-yy25:
+#line 400 "ext/pdo/pdo_sql_parser.c"
+yy42:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy26:
+yy43:
 	switch (yych) {
-	case 0x00:	goto yy21;
-	case '"':	goto yy28;
-	case '\\':	goto yy27;
-	default:	goto yy25;
+	case 0x00:	goto yy38;
+	case '"':	goto yy45;
+	case '\\':	goto yy44;
+	default:	goto yy42;
 	}
-yy27:
+yy44:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= 0x00) goto yy21;
-	goto yy25;
-yy28:
+	if (yych <= 0x00) goto yy38;
+	goto yy42;
+yy45:
 	++YYCURSOR;
-#line 58 "ext/pdo/pdo_sql_parser.re"
+#line 59 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 315 "ext/pdo/pdo_sql_parser.c"
+#line 422 "ext/pdo/pdo_sql_parser.c"
 }
-#line 66 "ext/pdo/pdo_sql_parser.re"
+#line 68 "ext/pdo/pdo_sql_parser.re"

 }


Modified: php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.re
===================================================================
--- php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.re	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/branches/PHP_5_4/ext/pdo/pdo_sql_parser.re	2011-06-04 22:54:40 UTC (rev 311812)
@@ -28,7 +28,7 @@
 #define PDO_PARSER_EOI 4

 #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 YYCURSOR        cursor
@@ -48,6 +48,7 @@
 	/*!re2c
 	BINDCHR		= [:][a-zA-Z0-9_]+;
 	QUESTION	= [?];
+	COMMENTS	= ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--"[^\r\n]*);
 	SPECIALS	= [:?"'];
 	MULTICHAR	= [:?];
 	EOF			= [\000];
@@ -61,6 +62,7 @@
 		BINDCHR									{ RET(PDO_PARSER_BIND); }
 		QUESTION								{ RET(PDO_PARSER_BIND_POS); }
 		SPECIALS								{ SKIP_ONE(PDO_PARSER_TEXT); }
+		COMMENTS								{ RET(PDO_PARSER_TEXT); }
 		(ANYNOEOF\SPECIALS)+ 					{ RET(PDO_PARSER_TEXT); }
 		EOF										{ RET(PDO_PARSER_EOI); }
 	*/

Added: php/php-src/branches/PHP_5_4/ext/pdo_mysql/tests/bug54929.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/pdo_mysql/tests/bug54929.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/pdo_mysql/tests/bug54929.phpt	2011-06-04 22:54:40 UTC (rev 311812)
@@ -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"
+}

Modified: php/php-src/trunk/ext/pdo/pdo_sql_parser.c
===================================================================
--- php/php-src/trunk/ext/pdo/pdo_sql_parser.c	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/trunk/ext/pdo/pdo_sql_parser.c	2011-06-04 22:54:40 UTC (rev 311812)
@@ -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"
 /*
   +----------------------------------------------------------------------+
@@ -30,7 +30,7 @@
 #define PDO_PARSER_EOI 4

 #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 YYCURSOR        cursor
@@ -47,35 +47,40 @@
 	char *cursor = s->cur;

 	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"
 {
 	YYCTYPE yych;
+	unsigned int yyaccept = 0;

 	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
 	yych = *YYCURSOR;
 	switch (yych) {
-	case 0x00:	goto yy11;
+	case 0x00:	goto yy13;
 	case '"':	goto yy2;
 	case '\'':	goto yy4;
+	case '-':	goto yy10;
+	case '/':	goto yy8;
 	case ':':	goto yy5;
 	case '?':	goto yy6;
-	default:	goto yy8;
+	default:	goto yy11;
 	}
 yy2:
+	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych >= 0x01) goto yy26;
+	if (yych >= 0x01) goto yy43;
 yy3:
-#line 63 "ext/pdo/pdo_sql_parser.re"
+#line 64 "ext/pdo/pdo_sql_parser.re"
 	{ SKIP_ONE(PDO_PARSER_TEXT); }
-#line 75 "ext/pdo/pdo_sql_parser.c"
+#line 79 "ext/pdo/pdo_sql_parser.c"
 yy4:
+	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
 	if (yych <= 0x00) goto yy3;
-	goto yy20;
+	goto yy37;
 yy5:
 	yych = *++YYCURSOR;
 	switch (yych) {
@@ -141,61 +146,160 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy16;
+	case 'z':	goto yy33;
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy30;
 	default:	goto yy3;
 	}
 yy6:
 	++YYCURSOR;
 	switch ((yych = *YYCURSOR)) {
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy30;
 	default:	goto yy7;
 	}
 yy7:
-#line 62 "ext/pdo/pdo_sql_parser.re"
+#line 63 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_BIND_POS); }
-#line 160 "ext/pdo/pdo_sql_parser.c"
+#line 165 "ext/pdo/pdo_sql_parser.c"
 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 yy10;
-	default:	goto yy8;
+	case '?':	goto yy9;
+	default:	goto yy11;
 	}
-yy10:
-#line 64 "ext/pdo/pdo_sql_parser.re"
-	{ RET(PDO_PARSER_TEXT); }
-#line 176 "ext/pdo/pdo_sql_parser.c"
-yy11:
+yy13:
 	++YYCURSOR;
-#line 65 "ext/pdo/pdo_sql_parser.re"
+#line 67 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_EOI); }
-#line 181 "ext/pdo/pdo_sql_parser.c"
-yy13:
+#line 199 "ext/pdo/pdo_sql_parser.c"
+yy15:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	switch (yych) {
+	case 0x00:
+	case '"':
+	case '\'':
 	case ':':
-	case '?':	goto yy13;
+	case '?':	goto yy18;
+	case '\n':
+	case '\r':	goto yy11;
 	default:	goto yy15;
 	}
-yy15:
-#line 60 "ext/pdo/pdo_sql_parser.re"
+yy17:
+#line 65 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 194 "ext/pdo/pdo_sql_parser.c"
-yy16:
+#line 217 "ext/pdo/pdo_sql_parser.c"
+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;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
+	yych = *YYCURSOR;
+	switch (yych) {
+	case ':':
+	case '?':	goto yy30;
+	default:	goto yy32;
+	}
+yy32:
+#line 61 "ext/pdo/pdo_sql_parser.re"
+	{ RET(PDO_PARSER_TEXT); }
+#line 298 "ext/pdo/pdo_sql_parser.c"
+yy33:
+	++YYCURSOR;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
+	yych = *YYCURSOR;
+	switch (yych) {
 	case '0':
 	case '1':
 	case '2':
@@ -258,62 +362,65 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy16;
-	default:	goto yy18;
+	case 'z':	goto yy33;
+	default:	goto yy35;
 	}
-yy18:
-#line 61 "ext/pdo/pdo_sql_parser.re"
+yy35:
+#line 62 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_BIND); }
-#line 268 "ext/pdo/pdo_sql_parser.c"
-yy19:
+#line 372 "ext/pdo/pdo_sql_parser.c"
+yy36:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy20:
+yy37:
 	switch (yych) {
-	case 0x00:	goto yy21;
-	case '\'':	goto yy23;
-	case '\\':	goto yy22;
-	default:	goto yy19;
+	case 0x00:	goto yy38;
+	case '\'':	goto yy40;
+	case '\\':	goto yy39;
+	default:	goto yy36;
 	}
-yy21:
+yy38:
 	YYCURSOR = YYMARKER;
-	goto yy3;
-yy22:
+	switch (yyaccept) {
+	case 0: 	goto yy3;
+	case 1: 	goto yy9;
+	}
+yy39:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= 0x00) goto yy21;
-	goto yy19;
-yy23:
+	if (yych <= 0x00) goto yy38;
+	goto yy36;
+yy40:
 	++YYCURSOR;
-#line 59 "ext/pdo/pdo_sql_parser.re"
+#line 60 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 293 "ext/pdo/pdo_sql_parser.c"
-yy25:
+#line 400 "ext/pdo/pdo_sql_parser.c"
+yy42:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy26:
+yy43:
 	switch (yych) {
-	case 0x00:	goto yy21;
-	case '"':	goto yy28;
-	case '\\':	goto yy27;
-	default:	goto yy25;
+	case 0x00:	goto yy38;
+	case '"':	goto yy45;
+	case '\\':	goto yy44;
+	default:	goto yy42;
 	}
-yy27:
+yy44:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= 0x00) goto yy21;
-	goto yy25;
-yy28:
+	if (yych <= 0x00) goto yy38;
+	goto yy42;
+yy45:
 	++YYCURSOR;
-#line 58 "ext/pdo/pdo_sql_parser.re"
+#line 59 "ext/pdo/pdo_sql_parser.re"
 	{ RET(PDO_PARSER_TEXT); }
-#line 315 "ext/pdo/pdo_sql_parser.c"
+#line 422 "ext/pdo/pdo_sql_parser.c"
 }
-#line 66 "ext/pdo/pdo_sql_parser.re"
+#line 68 "ext/pdo/pdo_sql_parser.re"

 }


Modified: php/php-src/trunk/ext/pdo/pdo_sql_parser.re
===================================================================
--- php/php-src/trunk/ext/pdo/pdo_sql_parser.re	2011-06-04 22:47:07 UTC (rev 311811)
+++ php/php-src/trunk/ext/pdo/pdo_sql_parser.re	2011-06-04 22:54:40 UTC (rev 311812)
@@ -28,7 +28,7 @@
 #define PDO_PARSER_EOI 4

 #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 YYCURSOR        cursor
@@ -48,6 +48,7 @@
 	/*!re2c
 	BINDCHR		= [:][a-zA-Z0-9_]+;
 	QUESTION	= [?];
+	COMMENTS	= ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--"[^\r\n]*);
 	SPECIALS	= [:?"'];
 	MULTICHAR	= [:?];
 	EOF			= [\000];
@@ -61,6 +62,7 @@
 		BINDCHR									{ RET(PDO_PARSER_BIND); }
 		QUESTION								{ RET(PDO_PARSER_BIND_POS); }
 		SPECIALS								{ SKIP_ONE(PDO_PARSER_TEXT); }
+		COMMENTS								{ RET(PDO_PARSER_TEXT); }
 		(ANYNOEOF\SPECIALS)+ 					{ RET(PDO_PARSER_TEXT); }
 		EOF										{ RET(PDO_PARSER_EOI); }
 	*/

Added: php/php-src/trunk/ext/pdo_mysql/tests/bug54929.phpt
===================================================================
--- php/php-src/trunk/ext/pdo_mysql/tests/bug54929.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/pdo_mysql/tests/bug54929.phpt	2011-06-04 22:54:40 UTC (rev 311812)
@@ -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"
+}
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to