在SELECT LIKE查询中使用PHP变量

时间:2018-11-24 16:26:27

标签: php mysqli

我正在尝试使用以下代码执行mysqli查询:

$sql = "SELECT * FROM `table` WHERE `description` LIKE ('AB CD %')";
$result= mysqli_query($con, $sql) or die(mysqli_error());

,此查询给了我6条结果。它只会查找“ AB CD EF ...”之类的项目,而不会查找“ AB CDEF ...”之类的项目,这正是我想要的。 但是,如果我给LIKE值一个像这样的变量:

$var = "AB CD ";
$sql = "SELECT * FROM `table` WHERE `description` LIKE ('$var%')";
$result= mysqli_query($con, $sql) or die(mysqli_error());

它给我零结果。

我也尝试了几种类似...('".$var."%')";CONCAT($var, '%')的LIKE格式,但是什么也没有。

如何在第二个查询中使用变量来获得与第一个查询相同的结果?

通过查询获取变量,该查询将选择所有description个项目,然后在while循环内,它将查找每个项目的首个大写字母:

$name = $row['description'];
$expr = '/[A-Z]*/';
preg_match_all($expr, $name, $res);
$var = implode(' ', $res[0]);

每行的值均类似于“ AB CD EF以外的其他非大写字母”

谢谢。

3 个答案:

答案 0 :(得分:1)

用大括号{}包装变量后如何处理?另外,我在 Like :)

之后删除了多余的括号()
$var = "AB CD ";
$sql = "SELECT * FROM `table` WHERE `description` LIKE '{$var}%'";

答案 1 :(得分:0)

好吧,user3783243发现了问题。 当我使数组内爆以获得$ var字符串时,由于某种原因我无法解释,其中包括了没有值的数组元素(很多)。解决的办法是分解$ var,使其通过array_filter函数,删除空元素,然后再次将其内爆。 谢谢大家。

答案 2 :(得分:-1)

使用:

$var = "AB CD ";
$sql = "SELECT * FROM `table` WHERE `description` LIKE '".$var."%'";

但这是一种不好的做法,同时也很容易受到攻击,请改用准备好的语句:http://php.net/manual/en/book.pdo.php