MySQL数据库搜索字符串 - 部分单词

时间:2015-01-02 13:03:57

标签: php mysql

是否可以将结果作为部分单词进行搜索?

例如...... 我目前正在查找基本形式品牌和名称

中的2个字段

我如何编码表格以便我可以搜索“Hei”和“Tom Sou”而不必搜索番茄汤?

有人能告诉我一个例子吗?

当前代码

<?php
$connect = mysql_connect($dbServer,$dbUsername,$dbPassword);
if(!$connect){
    die('Could not connect: '.mysql_error());
}

?>

<form action="" method="post">  
Brand <input type="text" name="Brand" />Item <input type="text" name="Item" /><input type="submit" value="Submit" />  
</form>  
<?php

$Brand = mysql_real_escape_string($_REQUEST['Brand']);   
$Item = mysql_real_escape_string($_REQUEST['Item']);     

$sql = "SELECT * FROM DB WHERE item_brand LIKE '%".$brand."%' AND item_name LIKE '%".$item."%'"; 
$r_query = mysql_query($sql); 

echo ('<table><tr><td>ID</td><td>Brand</td><td>Item</td></tr>');
    while ($row = mysql_fetch_array($r_query)){  
        echo '<tr><td>' .$row['item_ID'].'</td>';  
        echo '<td>' .$row['item_brand'].'</td>';    
        echo '<td>'.$row['item_name'].'</td></tr>';    
    }  
echo ("</table>");
?>

3 个答案:

答案 0 :(得分:1)

尝试使用:

$item="Tom Sou";
    $like="'";
    $srtarray=explode(' ',$item);
    foreach($srtarray as $key=>$val){// here you can use implode also 
        $like.="%$val%";
    }
    $like.="'";

$sql = "SELECT * FROM DB WHERE item_brand LIKE '%".$brand."%' AND item_name LIKE  $like"; 

答案 1 :(得分:0)

您可以在搜索字词中搜索空格并将其替换为%符号,因此“Tom Sou”会被Tom%Sou替换,整个查询会导致... WHERE item_name LIKE '%Tom%Sou%' ...

请注意,根据您的数据库解决方案,您需要执行不区分大小写的select / Like。

编辑:请确保使用PDO或mysqli而不是弃用的mysql模块,因为它可能不像新的灵魂那样安全,最终会从PHP中删除。 PDO和mysqli都支持新的数据库机制,如预备语句,而(至少mysqli)仍然提供类似的功能。

答案 2 :(得分:0)

我已按照您的需要修改了代码:这应该对您有用

<?php
$mysqli = mysqli_connect("localhost", "root", "Password", "DatabaseName");

if (mysqli_connect_errno($mysqli)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>

<form action="" method="post">
    Brand <input type="text" name="Brand" />
    Item <input type="text" name="Item" /><br />
         <input type="submit"  name="submit" value="submit" /></br>
</form>
<?php

if( $_POST['submit']){
//remove tags from user inputs
$Brand  =       strip_tags('%'.$_POST['Brand'].'%');    
$Item   =       strip_tags('%'.$_POST['Item'].'%'); 

//escape mysql injection 
$Brand = $mysqli->real_escape_string($Brand);
$Item = $mysqli->real_escape_string($Item);


$query = "SELECT * FROM  DB WHERE  item_brand LIKE '$Brand' AND  item_name LIKE '$Item'";
$res = mysqli_query($mysqli, $query);

if($res === FALSE) { 
    die(mysqli_error()); // TODO: better error handling
}
$row = mysqli_fetch_array($res);


echo '<table><tr><td>ID</td><td>Brand</td><td>Item</td></tr>';
        echo '<tr><td>' .$row['id'].'</td>';  
        echo '<td>' .$row['item_brand'].'</td>';    
        echo '<td>'.$row['item_name'].'</td></tr>';    

echo '</table>';


}