我在使用MySQL进行插入查询时遇到了麻烦。这就是我想要做的事情:
在我的表中的一个字段中,我想插入一堆URL及其各自的标题。我建立了这样的查询:
?content=<title of webpage>%%<url of webpage>%%<title of webpage>%%<url of webpage>%%
依此类推,具体取决于网址数量。
问题是如果URL包含类似“?var = somevalue”的内容,那么我的查询就会中断,因为MySQL会认为我正在声明一个新变量。
我怎样才能做到这一点?
答案 0 :(得分:0)
我认为你应该用\
来逃避序列如果您使用的是PHP,则选项是使用以下命令(它有多种形式):
程序风格
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
面向对象的风格
string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )
答案 1 :(得分:0)
以下是如何在PHP中使用占位符(我怀疑它是您正在使用的语言)
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
$name = 'one';
$value = 1;
$stmt->execute();
我从php.net
抓起来了使用预处理语句的占位符可以提供多种功能,但其中一种功能是安全地将数据与代码分开,以便您描述的问题消失。
从上述网站引用:
准备语句的参数 不需要引用;司机 自动处理这个。如果 应用程序专用于准备 声明,开发人员可以肯定 不会发生SQL注入 (但是,如果其他部分 查询正在建立 未转义的输入,SQL注入是 仍然可能)。