【发布时间】:2011-12-05 18:03:21
【问题描述】:
作为一个自学成才的新手,我给自己制造了一个大问题。在将数据插入数据库之前,我一直在将字符串中的撇号 (') 转换为双引号 (""),而不是 MySQL 实际需要的反斜杠和撇号 (\')。
在我的表增长到超过 200,000 行之前,我认为最好立即纠正这个问题。所以我做了一些研究,发现了 SQL REPLACE 函数,这很好,但我现在很困惑。
在 ASP 中,我是这样做的:
str = Replace(str,"'","""")
如果我在 SQL Workbench 中查看我的数据库,我转换的符号现在是一个单引号 ("),这让我有点困惑。我明白为什么它从双引号变为单引号,但我不知道是哪个我现在打算换一个。
要使用 SQL REPLACE 解决并纠正我的问题,我现在是将单引号 (") 转换为反斜杠和撇号 (\') 还是将双引号 ("") 转换为反斜杠和撇号 ( \')?
例如,这个:
SQL = " SELECT REPLACE(myColumn,"""","\'") FROM myTable "
或者这个:
SQL = " SELECT REPLACE(myColumn,""","\'") FROM myTable "
我希望我能很好地解释自己,任何建议都像往常一样感激地接受。对我的问题有任何疑问,请发表评论。
非常感谢
-- 更新--
我尝试了以下查询,但仍然无法更改数据中的 ( " ):
SELECT REPLACE(caption,'\"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'"','\'') FROM photos WHERE photoID = 3371
SELECT REPLACE(caption,'""','\'') FROM photos WHERE photoID = 3371
如果我搜索:
SELECT COUNT(*) FROM photos WHERE caption LIKE '%"%'
我得到 16,150 行。
-- 更新 2 --
好吧,我已经创建了一个“解决方法”。我设法使用以下 SQL 快速转换了整个列,编写了一个 ASP 脚本:
SELECT photoID, caption FROM photos WHERE caption LIKE '%""%';
然后在 ASP 中我做了:
caption = Replace(caption,"""","\'")
但我还是想知道为什么我不能用 SQL 实现这一点?
【问题讨论】:
-
您确实需要阅读有关使用参数化查询的信息。这将防止您的应用程序容易受到 SQL 注入的攻击
-
请注意,在
ASP中,使用""""呈现为单引号 (") 的值,而不是双引号 (""),因为在字符串内部,a引号由两个引号表示(转义)。 -
那是我学习约翰的名单上的下一个,是的。我有一个正则表达式函数,可以检查输入值和查询字符串中是否存在恶意内容,但我确信这并不安全......
-
感谢 mellamokb,但正如我在问题中所说,我确实理解 为什么 他们改为单引号。我现在需要知道的是如何在替换函数中引用它们。我现在换双打还是单打?