gpt4 book ai didi

php - 在 PHP 中执行简单搜索时查询结果不同

转载 作者:行者123 更新时间:2023-11-29 08:40:51 24 4
gpt4 key购买 nike

我正在 MySQL 数据库中执行以下查询(看看 SELECT AND WHERE,其余的并不重要):

SELECT distinct fname //more fields...
FROM filedepot_files AS ff
INNER JOIN filedepot_categories AS fc
ON ff.cid = fc.cid
INNER JOIN filedepot_access AS fa
ON fc.cid = fa.catid
WHERE fa.permid=$id AND fname LIKE '%$key%'
ORDER BY DATE

环境是一个在 Drupal 下运行的 PHP 脚本,带有 FileDepot 模块,但我怀疑这是否重要。

这是 PHP 脚本(重要的部分):

$id = 1;
$key = $_GET['key'];
$query = .... (see above)
$result = db_query($query);
while($row = db_fetch_array($result)){
//do stuff
echo $row['fname'];
}

db_query() 是一种 Drupal 方法,允许轻松执行 SQL 查询并返回一个数组,db_fetch_array() 允许解析结果。

现在,DB 包含以下 fname 条目(还有更多,这些只是示例):

  • 二基亚拉嗪1
  • 二基亚拉嗪2
  • 指导1
  • 圭达2

如果我使用“guida”作为键启动脚本,它会正确返回 PHP 和 MySQL 的两个条目。如果我使用“Guida”它也有效。但是,如果我使用“dichiarazione”,它不会与 PHP 一起使用,而与 MySQL 一起使用。奇怪的是“Dichiarazione”同时适用于 PHP 和 MySQL。

查询有什么问题?我尝试使用 LOWER(fname) LIKE '%$key%' 但它似乎没有按预期工作。

我确信我错过了一些愚蠢的东西,但我似乎找不到那是什么......

最佳答案

% 是 Drupal 查询中的特殊字符(用于占位符)。尝试双重转义:

WHERE fa.permid=$id AND fname LIKE '%%$key%%' 

但更令人担忧的是,您对 SQL 注入(inject)持开放态度。需要进行一些 sanitizer :

...
WHERE fa.permid= %d AND fname LIKE '%%%s%%'
...

$query = db_query($sql, $id, $key);

这可能看起来很疯狂,但 % 符号的数量是正确的。每个文字 % 有两个,字符串占位符有一个 (%s)

关于php - 在 PHP 中执行简单搜索时查询结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com