如何使用Strpos而不是While语句从MySQL数据库中选择结果?

时间:2011-05-13 21:11:51

标签: php mysql

我一直在使用PHP函数strpos来查找包含DB中字符串字符的结果:

User Types: Hel
Results: Hello, Hell, Helli, Hella

我有它基本上查询整个表:

$result = mysql_query("SELECT * FROM Events");

然后运行while语句以查看哪个结果包含输入的字符:

while($row = mysql_fetch_array($result))
 {

    $pos = strpos($row['Title'], $q);
        if ($pos === false) {
        } else {
            echo $row['Title'];
        }
  }

为了找到结果的数量,我正在使用:

$n = $n++

在while语句中。

我知道你可以使用:

$num_rows = mysql_num_rows($result);

如果您只是从数据库中选择这些值,要查找结果数,但我是否必须使用此while语句来查找与strpos函数匹配的结果数?或者我可以将strpos放入Select From查询吗?

非常感谢任何帮助,

泰勒

3 个答案:

答案 0 :(得分:2)

这似乎非常低效。你为什么不简单地让数据库为你搜索?

$result = mysql_query("SELECT * FROM Events WHERE Title LIKE '" . addslashes($q) . "%'");

然后循环浏览结果。

答案 1 :(得分:2)

您可以将SQL更新为

SELECT * 
FROM Events
WHERE Title LIKE '{your_string}%'

确保过滤sql注入。

答案 2 :(得分:2)

您可以使用LIKE声明:

SELECT * FROM Events WHERE field1 LIKE '%something%'

特殊%字符说“任何长度”;所以我们正在寻找一些东西(或什么都没有),然后是字符串,然后是东西(或什么都没有。)例如,搜索%f%将匹配foooff和{{ 1}}。

正如一般建议一样,我建议您使用php的MySQLi类;它是一个改进的版本(因此是affirmative),并提供准备好的语句,因此您不必过多担心SQL注入。