使用PHP和SQL数据库时,搜索非字母数字字符的问题



当搜索具有非字母数字字符的部分时,我很难弄清楚如何在SQL数据库上实现搜索。

除非在要搜索的零件号中有连字符或圆括号之类的字符,否则搜索效果很好。(有些零件号有正斜杠,但查询时会正确返回。(

例如:搜索1492-PDL3111返回0个结果。(部分字符串搜索效果很好,所以如果我搜索1492,我会得到1492-PDL3111零件号以及1492-PDL1124、1492-PDL3141,这很好,但如果我包括连字符,我会返回0结果。当我从字符串的中间或结尾进行部分字符串搜索时,我也会得到正确的结果。唯一的失败是当我搜索具有非-数字字符。

我粘贴下面的代码,希望这里有人能提供帮助。我一直在寻找解决方案,但都无济于事。

提前感谢!Thymalus

<?php 
$searchcross=$_GET[ 'crossref']; 
$remove=array( " ", "-"); 
$searchcross=str_replace($remove, "", $searchcross); 
if ($searchcross !="" ){ 
$query=$handler->prepare("SELECT * FROM php_cross_reference WHERE competitor_part_no LIKE :part_no ORDER BY competitor_part_no;"); 

$query->bindValue(':part_no', '%' . $searchcross . '%');   
$query->execute(); 
if ($query->rowCount()){ ?>
<!--If statement, only make this if there are results?-->
<div class="table-section">
<table class="search-table search-table-alt">
<caption>
<?php echo 'Search results for "'. $searchcross . '"' ?>
</caption>
<tr>
<th>Competitor Part Number</th>
<th>Competitor</th>
<th>Our Part Number</th>
</tr>
<!--This is where the PHP loop should begin-->
<?php 
while ($r=$query->fetch(PDO::FETCH_ASSOC)){ 
?>
<tr>
<td>
<?php 
echo '<strong>',$r[ 'competitor_part_no'], '</strong>' 
?>
</td>
<td>
<?php 
if ($r[ 'competitor_name']){ 
echo $r[ 'competitor_name']; 
} else { 
echo 'N/A'; 
} 
?>
</td>
<td>
<?php 
if ($r[ 'product_documentation']){ 
echo '<strong><a href="',$r[ 'product_documentation'], '">',$r[ 'our_part_no'], '</a></strong>'; 
} else { 
echo '<strong>',$r[ 'our_part_no'], '</strong>'; 
} ;?>
</td>
<?php 
} 
//PHP loop end 
?>
</table>
</div>
<!--  PHP if statement end?-->
<?php 
} else { 
echo '<h3 class="module">Your search returned '.$query->rowCount().' results.</h3>'; 
} 
} else { 
echo '<h3 class="module">please enter a search</h3>'; 
} 
?>

执行以下操作时,将从搜索字符串中删除连字符和空格:

$searchcross=str_replace($remove, "", $searchcross); 

如果要在搜索时忽略这些字符,还需要将它们从表中的字符串中删除。因此查询中的条件应该是:

WHERE REPLACE(REPLACE(competitor_part_no, '-', ''), ' ', '') LIKE :part_no

感谢您的输入。空格和连字符实际上是从该数组中删除的:$remove=数组(","-"(;这不是我们想要的,当我再次查看他们的代码时,我发现了这个问题。我删除了那行代码,它运行得很好。

最新更新