Php 如何从ODBC查询中转义单引号

Php 如何从ODBC查询中转义单引号,php,mysql,odbc,Php,Mysql,Odbc,可能重复: 查询ODBC查询时出现的错误如下: (pos: 72 '...M = 'Owen O'^Donavon' AND...') - syntax error 当我试图逃避它时: (pos: 73 '... = 'Owen O\'^Donavon' AND...') - syntax error ^意味着这就是它被破坏的地方 我尝试了以下方法: NAM = '".$var."' 还有: NAM = '".mysql_escape_string($var)."' 然后我绝望了 NA

可能重复:

查询ODBC查询时出现的错误如下:

(pos: 72 '...M = 'Owen O'^Donavon' AND...') - syntax error
当我试图逃避它时:

(pos: 73 '... = 'Owen O\'^Donavon' AND...') - syntax error
^意味着这就是它被破坏的地方

我尝试了以下方法:

NAM = '".$var."'
还有:

NAM = '".mysql_escape_string($var)."'
然后我绝望了

NAM = \"".$var."\"
其中,$var是其中包含“的”的任何名称

如果需要整个查询:

UPDATE TABLE SET COLUMN1 = 'ERR' WHERE COLUMN_NAM = '".mysql_escape_string($var)."' AND COLUMN7 = 0");

有人知道如何正确转义引号吗?

要在MySQL字符串文字(由单引号分隔)中包含单引号,请使用两个单引号字符。e、 g

'I don''t like it'
实际上,当MySQL解析它时,它将看到两个单引号字符,并将其解释为文本中的一个单引号,而不是看到字符串文本的“结束”

但是(正如您所发现的)当这里只有一个引号时,MySQL解析器会有一种嘶嘶的感觉。考虑这个例子:

'I don't like it' 
MySQL解析器看到的是一个字符串文本,长度为五个字符,包含
“我不知道”
。然后,MySQL看到这个文本后面还有一些需要解析的标记:
t喜欢它
。解析器不会将其视为字符串文本的一部分。前一个单引号标记了字符串文字的结尾

所以现在,MySQL解析器无法理解
t喜欢它的本意。它将这些标记后面的单引号视为另一个字符串文本的开头。(因此,您可以非常聪明地了解出现在那里的内容,并设法获得MySQL确实理解的内容……这可能会更糟。)

(注意:此问题不是ODBC特有的;这会影响在MySQL查询文本中使用字符串文字的客户端。)


避免此类问题的一种方法是在查询文本中使用绑定变量,而不是字符串文本。(但对于MySQL,不管怎么说,发生的是转义,发送到MySQL服务器(可以说是在幕后)的是字符串文本


有时我们确实需要在查询文本中包含字符串文本,并且不需要使用绑定变量作为解决方法。因此,了解如何在字符串文本中“转义”一个单引号是很好的,它包含在单引号中。

mysql\u real\u escape\u string()
仅用于
mysql\u*()
API,您没有使用它(因为您使用的是ODBC),请参见: