MySQL转义字符串导致数据长度错误


MySQL escape string causing data lenght error

在将字符串插入数据库之前,我正在尝试对其进行转义,此字符串包含一些需要转义的字符。例如:

 $mystring = "So, This is the string it's causing me headaches." 

我想把这个字符串插入一个有一定限制的字段,比如50。但问题是,当我使用mysql_real_eescape_string函数时,它添加了'来转义我的单引号',这使我的字符串长度为51,因此我无法将其插入到DB中。

使用mysqli_real_escape_string($mystring)

您也可以使用str_replace,它总是对我有效。

$mystring=str_replace("''","'","$mystring");
$mystring=str_replace("'","''","$mystring");

反斜杠不是字符串的部分。它只是SQL语句中字符串文本的一部分。这样想:

CONCAT('a', 'b', 'c')

SQL语句中有相当多的字符,但该语句的结果字符串只是包含3个字符的abc。同样,这个:

'a''c'

是具有三个字符的字符串a'c的正确格式的文字。

如果您的字符串在转义后变得越来越长,则可能是因为转义太频繁,'会成为您试图存储的实际字符串的一部分。

请参阅http://sqlfiddle.com/#!2/76008/1演示。CCD_ 7完全适合3个字符的字段。