mysqli 选择/搜索有和没有空格的名称
Posted
技术标签:
【中文标题】mysqli 选择/搜索有和没有空格的名称【英文标题】:mysqli select/search names that have and don't have sapces 【发布时间】:2019-03-17 19:44:20 【问题描述】:我想回显列“tipster”等于用户选择的表单输入选项的行。
我已经尝试过replace (tipster ' '. '') LIKE '$tipster'
,但它没有返回任何结果......有些字段的名称中有空格,而有些则没有 - 例如。 'John Jones Smith'
、'John Jones'
和 'JohnJones'
.... 我需要搜索与 html 表单中选择的选项匹配的列(检查有无空格的行)
如果我只进行一个单词搜索(例如示例)...结果会作为 LIKE 查询返回。我想评论一下 GET 函数有效,但是在 url 中将输入作为 example+one 传递....不确定 + 是否可能影响 mysqli 结果?
HTML
<form id="tipster_search" method="get" action="example.php">
<label for="tipster">Select Tipster</label>
<select class="form-control" name="tipster" id="tipster">
<option>Example One</option>
<option>ExampleTwo</option>
<option>Example Option Three</option>
</select>
<br>
<button class="btn btn-info" name="submit">Search</button>
</form>
PHP
function processForm()
$tipster = $_GET['tipster'];
$url = "example.php?tipster=".$tipster."";
header("Location: $url");
exit;
$tipster = $_GET['tipster'];
$q = "SELECT * FROM bets WHERE `tipster` LIKE '%$tipster%' ORDER BY betDate DESC LIMIT 25";
$query = mysqli_query($connection,$q);
$x = 1;
echo "<table class='table'><tr>";
echo "<th>ID</th>";
echo "<th>Bet Date</th>";
echo "<th>Tipster</th>";
echo "<th>Sport</th>";
echo "<th>Meeting</th>";
echo "<th>Time</th>";
echo "<th>Stake Name</th>";
echo "<th>Odds</th>";
echo "<th>Stake Type</th>";
echo "<th>Stake Placed</th>";
echo "<th>Result</th>";
echo "<th>Return</th>";
echo "<th>Profit</th>";
if($query === FALSE)
die(mysqli_error($connection)); // better error handling
while($res = mysqli_fetch_array($query))
$id = $res['id'];
$betDate = $res['betDate'];
$tipster = $res['tipster'];
$sport = $res['sport'];
$meeting = $res['meeting'];
$time = $res['time'];
$stakeName = $res['stakeName'];
$odds = $res['odds'];
$stakeType = $res['stakeType'];
$stakePlaced = $res['stakePlaced'];
$result = $res['result'];
$return = $res['return'];
$profit = $res['profit'];
echo "<tr><td><p>$id</p></td>";
echo "<td><p>$betDate</p></td>";
echo "<td><p>$tipster</p></td>";
echo "<td><p>$sport</p></td>";
echo "<td><p>$meeting</p></td>";
echo "<td><p>$time</p></td>";
echo "<td><p>$stakeName</p></td>";
echo "<td><p>$odds</p></td>";
echo "<td><p>$stakeType</p></td>";
echo "<td><p>£$stakePlaced</p></td>";
echo "<td><p>$result</p></td>";
echo "<td><p>£$return</p></td>";
echo "<td><p>£$profit</p></td></tr>";
?>
【问题讨论】:
怎么样:WHERE REPLACE(tipster, ' ', '') LIKE CONCAT('%', REPLACE($tipster, ' ', ''), '%')
?
我会试一试@GMB
@GMB - 从下拉列表中单击示例一然后得到这个 - 您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 'One, ' ', '') 附近使用的正确语法,
对不起:WHERE REPLACE(tipster, ' ', '') LIKE CONCAT('%', REPLACE('$tipster', ' ', ''), '%')
。注意:您应该考虑使用参数化查询来保护您的代码免受 SQL 注入...
不错!让我将其发布为答案...
【参考方案1】:
怎么样:
WHERE REPLACE(tipster, ' ', '') LIKE CONCAT('%', REPLACE('$tipster', ' ', ''), '%')
注意:SO 上的任何人都会强烈建议use prepared statements and parameterized queries,以保护您的代码免受 SQL 注入并使您的查询更具可读性和可维护性。使用参数化查询时,这种错字更容易检测到。
【讨论】:
以上是关于mysqli 选择/搜索有和没有空格的名称的主要内容,如果未能解决你的问题,请参考以下文章