尝试为设备数据库构建搜索页面,我有一个准备好的语句,它采用设备“标签”(始终需要)并在“标签”与用户输入匹配的六个不同数据字段中搜索关键字。
问题是如果关键字是IN
这些可能很长的字段之一,则找不到任何结果,因此会丢失许多预期结果。
在常规 SQL 中,我只需要连接表并将LIKE
查询添加到IN
查询中;但是对于 mysqli,我正在使用带有?
占位符的准备好的语句,并且不确定对于每个变量多次使用此标记可以做什么。
我的声明是这样的:
if (!($stmt = $conn->prepare("SELECT * FROM equipment
WHERE EQUIP_CND LIKE ?
AND (EQUIP_TYP LIKE ? OR ((EQUIP_SER LIKE ? OR EQUIP_PNO LIKE ?)
OR (EQUIP_LOC LIKE ? OR EQUIP_CMT LIKE ?)));"))) {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
我只想替换LIKE
为LIKE IN
. 如何实现这一目标?
在like
需要wildcards
有宽松的匹配。
例如
select * from table where a like 'b'
是相同的:
select * from table where a = 'b'
所以b
会找到一个记录,但abc
不会。
从手册:
使用 LIKE,您可以在模式中使用以下两个通配符:
%匹配任意数量的字符,甚至零个字符。
_正好匹配一个字符。
所以要找到abc
你会使用:
select * from table where a like '%b%'
对于准备好的语句,通配符被附加到变量或绑定中,而不是在查询本身中。PDO 手册页上的示例 6 显示了这一点。http://php.net/manual/en/pdo.prepared-statements.php#example-991(评论后// placeholder must be used in the place of the whole value
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句