Php 如何从数据库中选择具有特定字符串一部分的值的所有行?

Php 如何从数据库中选择具有特定字符串一部分的值的所有行?,php,mysql,Php,Mysql,我有一个循环正在生成一个字符串,如$sku=MAR-9-870-2-L。我有一个数据库,它是一个“skusearchquery”列表,通常看起来像skusearchquery=MAR-9。我试图搜索数据库中包含skusearchquery的所有行,这些行包含在字符串$sku中 我知道下面的代码不起作用,因为MAR-9-870-20-L与MAR-9-870不同,因为MAR-9-870不包含较长的字符串,所以我想知道如何说:如果行值skuearchquery与字符串的一部分匹配MAR-9-870-2

我有一个循环正在生成一个字符串,如
$sku=MAR-9-870-2-L
。我有一个数据库,它是一个“skusearchquery”列表,通常看起来像skusearchquery=MAR-9。我试图搜索数据库中包含skusearchquery的所有行,这些行包含在字符串$sku中

我知道下面的代码不起作用,因为
MAR-9-870-20-L
MAR-9-870
不同,因为
MAR-9-870
不包含较长的字符串,所以我想知道如何说:如果行值skuearchquery与字符串的一部分匹配
MAR-9-870-20-L
,那么选择它

$search = mysqli_query($connect, "SELECT * FROM skusearch WHERE skusearchquery LIKE '%$sku%'");

请尝试
LOCATE()
函数:

$search=mysqli_query($connect,"SELECT * FROM skusearch WHERE LOCATE(`skusearchquery`,'$sku'");

…如果此测试结果是肯定的,您应该听取tadman的建议并保护您的查询。

请尝试
LOCATE()
函数:

$search=mysqli_query($connect,"SELECT * FROM skusearch WHERE LOCATE(`skusearchquery`,'$sku'");

…如果这个测试结果是肯定的,您应该采纳tadman的建议并保护您的查询。

正如您所说,您的searchquery字段可以包含sku的较小部分,那么您也可以尝试在下面的查询中获得这些结果

$search = mysqli_query($connect, "SELECT * FROM skusearch WHERE skusearchquery LIKE '%$sku%'" or '$sku'  like  concat('%',skusearchquery,'%');

另外,请确保按照@tadman的建议,保护您的查询不受sql注入的影响。

正如您所说,您的searchquery字段可以包含sku的较小部分,然后您也可以尝试在下面的查询中获得这些结果

$search = mysqli_query($connect, "SELECT * FROM skusearch WHERE skusearchquery LIKE '%$sku%'" or '$sku'  like  concat('%',skusearchquery,'%');

另外,请确保按照@tadman的建议保护您的查询不受sql注入的影响。

请添加表的数据库结构。为了清晰起见,我重写了问题。警告:使用
mysqli
时,您应该使用和向查询中添加用户数据。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。请添加表的数据库结构。为了清晰起见,我重写了问题。警告:使用
mysqli
时,您应该使用并将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。