2010-07-09 68 views
0

目前,我有这个代码MySQL的插入逃生

 
$main_cat = "Antiques-collectables"; 
$mcat = "0187-1443"; 
$sub_cat = "toys"; 


    mysql_query(" 
INSERT INTO categories 
(id, main_cat, sub_cat, mcat) 
VALUES 
('', '$main_cat', '$sub_cat', '$mcat') 
"); 

因为某些原因$ MCAT值不正确保存。当我在数据库中检查它时,它显示为“1”,“347”等值......只有1或3个数字值。我认为“ - ”被sql引擎解释为运算符。有什么办法可以逃脱它吗?我也试过

 
$mcat = str_replace("-", "\-", $mcat); 

但仍然不起作用。

回答

0

您没有在表格中提及您的数据类型。 我认为mcat的数据类型是数字类型。

可能通过将mcat数据类型更改为字符串来解决您的问题。

1

将字符串插入数据库时​​,需要确保使用mysql_real_escape_string()。这可以防止任何无意的问题,以及SQL注入,这可能会给您的网站带来很多问题。

你也可以看看使用prepared statements,它可以有效地消除这个问题。

0

不,' - '在单引号内不是SQL运算符(就像你在那里)。

mcat列可能有错误的数据类型。它是一个VARCHAR吗?要存储你在那里,它应该是。

+0

或者也许id是一个自动增量,应该省略? – 2010-07-09 20:54:58

+0

@丹Heberden:为AUTOINCREMENT索引插入一个空值在MySQL中工作。另外,如果他有这个问题,他的整个数据库将是一行(因为每个INSERT都会覆盖前一个,具有相同的密钥)。 – Borealid 2010-07-09 21:03:46

+0

好点 - 我浏览了“现有数据”部分:/ – 2010-07-09 21:19:10