MySQL 数据库搜索字符串 - 部分单词
MySQL Database Search Strings - Partial words
是否可以搜索部分单词的结果?
例如...
我目前正在以基本形式查找 2 个字段 Brand 和 Name
我如何编码 table 以便我可以搜索 "Hei" 和 "Tom Sou" 而不必搜索 Tomato Soup?
谁能给我举个例子?
当前代码
<?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>");
?>
您可以在搜索词中搜索空格并将其替换为 % 符号,因此 "Tom Sou" 将替换为 Tom%Sou
,这在整个查询中将导致 ... WHERE item_name LIKE '%Tom%Sou%' ...
。
请注意,根据您的数据库解决方案,您需要不区分大小写 select / Like。
编辑:请确保使用 PDO 或 mysqli 而不是已弃用的 mysql 模块,因为它可能不如较新的灵魂安全,最终将从 PHP。 PDO 和 mysqli 都支持新的数据库机制,例如准备好的语句,同时(至少 mysqli)仍然提供类似的功能。
尝试使用这个:
$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";
我已经根据您的需要修改了代码,我认为:这应该适合您
<?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>';
}
是否可以搜索部分单词的结果?
例如... 我目前正在以基本形式查找 2 个字段 Brand 和 Name
我如何编码 table 以便我可以搜索 "Hei" 和 "Tom Sou" 而不必搜索 Tomato Soup?
谁能给我举个例子?
当前代码
<?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>");
?>
您可以在搜索词中搜索空格并将其替换为 % 符号,因此 "Tom Sou" 将替换为 Tom%Sou
,这在整个查询中将导致 ... WHERE item_name LIKE '%Tom%Sou%' ...
。
请注意,根据您的数据库解决方案,您需要不区分大小写 select / Like。
编辑:请确保使用 PDO 或 mysqli 而不是已弃用的 mysql 模块,因为它可能不如较新的灵魂安全,最终将从 PHP。 PDO 和 mysqli 都支持新的数据库机制,例如准备好的语句,同时(至少 mysqli)仍然提供类似的功能。
尝试使用这个:
$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";
我已经根据您的需要修改了代码,我认为:这应该适合您
<?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>';
}