0

我正在尝试在用 C 编写的 CGI 脚本中构建 SQL 查询。用户在查询页面时传递了某种参数,脚本需要查询:

SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%{parameter}%'

由于转义和安全问题,我显然不能将 {parameter} 替换为 %s 和 sprintf 为字符串。

因此,我构建了一个准备好的语句:

const char * statement = "SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%?%'";

最终发生的是我的问号没有被解析并且绑定失败。当我将语句的结尾更改为“ nameLIKE ?”时,这很有效,除了我丢失了包含该术语而不是等于它的结果,这很糟糕。

是否有可能解决这个问题,并且仍然可以正确、安全地在字符串中使用 LIKE 和参数构造 SQL 语句?

谢谢!

4

3 回答 3

1

尝试在查询中使用,并在参数字符串LIKE ?前面添加/附加- 我认为这应该可以工作(无论如何它都是通过 PHP api 实现的,它可能在后台使用相同的库)。%

在 PHP 中看到同样的问题:如何使用 LIKE 语句创建 PDO 参数化查询?

于 2012-10-29T00:08:36.520 回答
0

使用 php 和 mysli 也存在同样的问题。那里的技巧是使用sql函数concat,例如LIKE CONCAT('%',?,'%')也应该在C中工作..

于 2012-10-29T00:01:41.457 回答
-1

为什么不使用 strcat 函数构建一个新的查询字符串呢? http://home.fhtw-berlin.de/~junghans/cref/MAN/strcat.htm 它应该可以解决您的问题。

//编辑:例如:

char *cmd = "SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%":
char *cmdEnd = "%'";

// concat strings
strncat(cmd, parameter, strlen(parameter);
strncat(cmt,cmdEnd);
于 2012-10-29T00:02:36.103 回答