【问题标题】:Search A Single String In MySQL在 MySQL 中搜索单个字符串
【发布时间】:2013-01-28 12:10:40
【问题描述】:

我正在制作一个私人消息系统并创建了一个 php 搜索页面,我正在使用 JQuery 将一个变量从 keyUp 上的文本字段传递到一个名为 USearch.php 或用户名搜索的 PHP 文件。这是我的代码:

<?php
$Connect = new mysqli("localhost", "root", "", "Data");
$Val = $_POST['Val'];

if($Val)
{
$Search = 'SELECT * FROM Users WHERE ';
$Term = explode(" ", $Val);

foreach($Term as $Key)
{
    $I = 0;
    $I++;
    if($I == 1)
    {
        $Search .= 'Username LIKE "'.$Key.'" LIMIT 0, 10 ';
    }
    else
    {
        $Search .= 'OR Username LIKE "'.$Key.'" LIMIT 0, 10 ';
    }
}

if($Result = $Connect->query($Search))
{
    while($Row = $Result->fetch_assoc())
    {
        $User = $Row['Username'];

        $USearch['S'] = $User;
    }
}
}
echo json_encode($USearch);
?>

如您所见,我的代码没有错误,我的问题是我正在数据库中搜索用户,这意味着我正在搜索 1 个单词或字符串,通过使用此 PHP 代码,我必须输入确切的用户名让函数返回一个值。我的真正意图是搜索字符串并根据我输入的字符串返回所有相似的用户名。

【问题讨论】:

  • 使用% 在您的 SQL 中您希望它打开的位置。阅读:dev.mysql.com/doc/refman/5.0/en/… 另外,请查看准备好的语句,您目前正面临 SQL 攻击。
  • 谢谢,成功了!我现在将开始使用准备好的语句。
  • 好吧,你说你的代码没有错误是错误的。您可能想查看您的 foreach 循环。并尝试在 $key 之间添加 %。
  • 不客气! @josephcaracuel foreach 循环可能只有一次迭代,除非用户名可以有空格,这意味着它可能应该被删除并成为一个可以准备的语句。但实际上,回答问题时没有必要粗鲁——从语法上讲,代码是正确且没有错误的。
  • @Jon 感谢您告诉我。

标签: php jquery mysql json search


【解决方案1】:

就像 Jon 说的 - 你想在你希望你的 SQL 有一个通配符的地方使用%。

如果您想要名称类似于 matt 的所有值,您可以这样做

WHERE name LIKE '%matt%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2013-10-22
    • 2021-03-31
    • 2011-06-28
    相关资源
    最近更新 更多