Bug #119058 `\` is inconsistent in prepared statement and normal query
Submitted: 23 Sep 0:57 Modified: 23 Sep 17:00
Reporter: chi zhang Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Prepared statements Severity:S1 (Critical)
Version:9.4.0 OS:Any
Assigned to: CPU Architecture:Any

[23 Sep 0:57] chi zhang
Description:
Hi,

In the following test case, the query executes successfully as a normal query, but triggers an error in prepared statement:

```
mysql> EXECUTE prepare_query;
+---------------------------+
| ((t1.c0)NOT REGEXP('\L')) |
+---------------------------+
|                         1 |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT '\'';
+---+
| ' |
+---+
| ' |
+---+
1 row in set (0.00 sec)

mysql> PREPARE prepare_query FROM "SELECT '\''";
ERROR 1064 (42000): 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
```

This sometimes can cause logic bugs, as shown in the following test case:
```
mysql> CREATE TABLE t0(c0 DOUBLE);
Query OK, 0 rows affected (0.01 sec)

mysql> REPLACE INTO t0 VALUES (0.5);
Query OK, 1 row affected (0.03 sec)

mysql> SELECT t0.c0 FROM t0 WHERE '1\'#' AND FALSE;
Empty set, 1 warning (0.00 sec)

mysql> PREPARE prepare_query FROM "SELECT t0.c0 FROM t0 WHERE '1\'#' AND FALSE";
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql> EXECUTE prepare_query;
+------+
| c0   |
+------+
|  0.5 |
+------+
1 row in set (0.00 sec)
```

How to repeat:
```
SELECT '\'';
PREPARE prepare_query FROM "SELECT '\''";
```

```
CREATE TABLE t0(c0 DOUBLE);
REPLACE INTO t0 VALUES (0.5);
SELECT t0.c0 FROM t0 WHERE '1\'#' AND FALSE;   -- empty result
PREPARE prepare_query FROM "SELECT t0.c0 FROM t0 WHERE '1\'#' AND FALSE";  -- 0.5
EXECUTE prepare_query;
```
[23 Sep 17:00] MySQL Verification Team
Thanks for the report.