PHP 如何进行 mysql 的模糊查询? 有成熟的库没?

2017-01-09 21:16:23 +08:00
 anonymoustian

现在我进行模糊查询是靠字符串的拼接,代码如下:

$sql = "SELECT * FROM pdns.rdata_copy WHERE rdomain LIKE '%".$_GET['domain']."'";

$ccdomain = $db->rawQuery($sql);

但是这样不就成了 SQL 注入了么,能否可以有一些库函数进行 预编译的那种分离的 可以直接调用呢?

3531 次点击
所在节点    PHP
8 条回复
kaolalotree
2017-01-09 21:25:25 +08:00
对获取的参数封一层 addcslash 呗
odoooo
2017-01-09 21:28:20 +08:00
pdo
Jakesoft
2017-01-09 22:05:48 +08:00
楼主看一下 pdo 的预处理语句和参数绑定
jarlyyn
2017-01-09 22:13:49 +08:00
pdo
wh1012023498
2017-01-09 23:09:13 +08:00
mingl0280
2017-01-10 02:43:51 +08:00
Mysqli 的 Prepared 语句
PDO 的 Prepared 语句
都可以完全解决注入问题。
例如
$sqli = new mysqli();
$sqli->connect(host, username, password, database);
$stmt = $sqli->prepare('SELECT passhash FROM users WHERE username=?');
$usn = $_POST['User'];
$stmt->bind_param('s', $usn);
$stmt->execute();
$stmt->bind_result($queryResult);
$stmt->fetch();
if (strtolower($queryResult) == strtolower($_POST['pass']))
txlty
2017-01-10 03:54:08 +08:00
字符串拼接可以用。但不能直接把外部数据拼进来。必须处理一下。
最古老的函数是 addslashes , mysql 对应函数是 mysql_real_escape_string 。
mysqli 对应函数是 mysqli_real_escape_string , PDO 对应方法是 quote 。
前两者在 GBK 编码下会间接产生漏洞。推荐后两者。
abc123ccc
2017-01-10 08:07:48 +08:00
1 、模糊查询: PDO 首选,楼上已经给出方法了,我就不写了。
2 、成熟库:网上到有一个据说是 TP3.1 框架内挖出来的库,不晓得楼主能不能使用得习惯。好像还有一个近似 CI 用的 DB 库。我就知道这两个在网上能找到。这些都是用 PDO 的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX