我们可以将 LIKE 关键字与变量和下划线一起使用吗?

分享于2022年12月29日 mysql php 问答
【问题标题】:can we use LIKE keyword with Variable and undescore sign?我们可以将 LIKE 关键字与变量和下划线一起使用吗?
【发布时间】:2022-12-16 01:10:56
【问题描述】:

我有包含水库详细信息的数据库表。这些水库按其特点分为18种类型。每个水库都有唯一的代码(reservoir code)。然后我需要根据它们的类型找到并显示这些水库。我使用表单选择水库类型并提交到 PHP 页面并显示水库列表 ORDER BY 水库代码。我使用以下代码。

`

query($sql);

     ?>
num_rows > 0) { while ($row = $result->fetch_assoc()) { ?>
ID Resource Type Reservoir Name Reservoir Code

` 但它给出空结果。

我尝试使用

$sql = "SELECT * FROM resourcelist WHERE rescode LIKE CONCAT($resreq,'_') ORDER BY rescode "; 但是当使用

$sql = "SELECT * FROM resourcelist WHERE rescode LIKE '$resreq%') ORDER BY rescode ";

给出其他类别的结果,使用带有额外字母的相同字符重新编码。

会是什么问题?请帮忙解决这个问题。 谢谢,

  • 这是正确的方法: '{$resreq}__'

【解决方案1】:

您需要分隔变量,以便下划线不会被视为变量名称的一部分,例如 {$resreq}__

但是,您不应将变量直接替换到 SQL 查询中,因为这会使您容易受到 SQL 注入攻击。使用带参数的准备好的语句。然后,您可以使用 CONCAT() _ % 连接到正则表达式。

$sql = "SELECT * FROM resourcelist WHERE rescode LIKE CONCAT(?, '__') ORDER BY rescode";
$stmt = $con->prepare($sql);
$stmt->bind_param("s", $resreq);
$stmt->execute();
$result = $stmt->get_result();

【讨论】: