首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在写入MySQL数据库时处理撇号

如何在写入MySQL数据库时处理撇号
EN

Stack Overflow用户
提问于 2010-10-30 10:00:10
回答 4查看 16.3K关注 0票数 92

我得到了这个错误:

您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以获取正确的语法,以便在第3行的“%s”、“门户”、“”、“offering”、“MSNBC”、“新闻”、“”、“sports”、“”MSN“”、“”Money“”、“MySQL”中使用。

唯一的问题是,在插入包含撇号的数据时会出现此错误。我尝试将数据类型从VARCHAR更改为TEXT,但结果仍然相同。

我试着把addslashes()放进去

我该如何解决这个问题?

代码语言:javascript
复制
$query=" INSERT INTO alltags
 (id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30)
VALUES      
 ('',mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) "; 
mysql_query($query) or die(mysql_error());

我将其更改为mysql_real_escape_string。这个语法正确吗?我收到了错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-30 10:57:11

对包含MySQL可能解释的字符的数据进行编码的过程称为“转义”。必须使用mysql_real_escape_string对字符串进行转义,这是一个PHP函数,而不是MySQL函数,这意味着在将查询传递给数据库之前必须在PHP中运行它。必须对从外部源进入程序的任何数据进行转义。任何未转义的数据都是潜在的SQL injection

在构建查询之前,您必须对数据进行转义。此外,您还可以使用PHP循环结构和range以编程方式构建查询

代码语言:javascript
复制
// Build tag fields
$tags = 'tag' . implode(', tag', range(1,30));

// Escape each value in the uniqkey array
$values = array_map('mysql_real_escape_string', $uniqkey);

// Implode values with quotes and commas
$values = "'" . implode("', '", $values) . "'";

$query = "INSERT INTO alltags (id, $tags) VALUES ('', $values)";

mysql_query($query) or die(mysql_error());
票数 51
EN

Stack Overflow用户

发布于 2010-10-30 10:04:00

使用mysql_real_escape_string是处理SQL插入/更新字符的一种更安全的方法:

代码语言:javascript
复制
INSERT INTO YOUR_TABLE
VALUES
  (mysql_real_escape_string($var1),
   mysql_real_escape_string($var2))

此外,我会将您的列从TEXT改回VARCHAR -除了索引之外,搜索的效果要好得多。

针对您的更新进行更新

由于id是一个auto_increment列,因此您可以:

  • 将其从列列表中删除,这样您就不必在VALUES子句中提供值:

插入所有标签(tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,)值((),())mysql_real_escape_string($uniqkey5)、mysql_real_escape_string($uniqkey6)、mysql_real_escape_string($uniqkey7)、mysql_real_escape_string($uniqkey8)、mysql_real_escape_string($uniqkey9)、mysql_real_escape_string($uniqkey10)、mysql_real_escape_string($uniqkey11)、mysql_real_escape_string($uniqkey12)、mysql_real_escape_string($uniqkey13)、mysql_real_escape_string()、()、()、mysql_real_escape_string($uniqkey17)、mysql_real_escape_string($uniqkey18)、mysql_real_escape_string($uniqkey19)、mysql_real_escape_string($uniqkey20)、mysql_real_escape_string($uniqkey21)、mysql_real_escape_string($uniqkey22)、mysql_real_escape_string($uniqkey23)、mysql_real_escape_string($uniqkey24)、mysql_real_escape_string($uniqkey25)、mysql_real_escape_string()、()、()、mysql_real_escape_string($uniqkey29)) ";

  • 在列列表中包含id,这要求您在VALUES子句中使用任一值来代替其位置:

代码语言:javascript
复制
- `NULL`
- `DEFAULT`

下面是一个使用NULL作为id占位符的示例:

代码语言:javascript
复制
INSERT INTO alltags
  (id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,tag11,tag12,tag13,tag14,tag15,tag16,tag17,tag18,tag19,tag20,tag21,tag22,tag23,tag24,tag25,tag26,tag27,tag28,tag29,tag30)
 VALUES      
  (NULL,mysql_real_escape_string($uniqkey[0]),mysql_real_escape_string($uniqkey[1]),mysql_real_escape_string($uniqkey[2]),mysql_real_escape_string($uniqkey[3]),mysql_real_escape_string($uniqkey[4]),mysql_real_escape_string($uniqkey[5]),mysql_real_escape_string($uniqkey[6]),mysql_real_escape_string($uniqkey[7]),mysql_real_escape_string($uniqkey[8]),mysql_real_escape_string($uniqkey[9]),mysql_real_escape_string($uniqkey[10]),mysql_real_escape_string($uniqkey[11]),mysql_real_escape_string($uniqkey[12]),mysql_real_escape_string($uniqkey[13]),mysql_real_escape_string($uniqkey[14]),mysql_real_escape_string($uniqkey[15]),mysql_real_escape_string($uniqkey[16]),mysql_real_escape_string($uniqkey[17]),mysql_real_escape_string($uniqkey[18]),mysql_real_escape_string($uniqkey[19]),mysql_real_escape_string($uniqkey[20]),mysql_real_escape_string($uniqkey[21]),mysql_real_escape_string($uniqkey[22]),mysql_real_escape_string($uniqkey[23]),mysql_real_escape_string($uniqkey[24]),mysql_real_escape_string($uniqkey[25]),mysql_real_escape_string($uniqkey[26]),mysql_real_escape_string($uniqkey[27]),mysql_real_escape_string($uniqkey[28]),mysql_real_escape_string($uniqkey[29])) "; 

我真的想强调,你不应该这样设置你的专栏。

票数 13
EN

Stack Overflow用户

发布于 2010-10-30 11:48:29

meagar的答案略有改进:

编辑: meagar更新了他的帖子,所以他的答案现在更好了。

代码语言:javascript
复制
$query = 'INSERT INTO alltags (id, ';

// append tag1, tag2, etc.
$query .= 'tag' . implode(', tag', range(1, 30)) . ") VALUES ('', ";

// escape each value in the uniqkey array
$escaped_tags = array_map('mysql_real_escape_string', $uniqkey);

// implode values with quotes and commas, and add closing bracket
$query .= "'" . implode("', '", $escaped_tags) . "')";

// actually query
mysql_query($query) or die(mysql_error());
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4056922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档