2011-05-13 35 views
2

我一直使用PHP函數strpos查找包含從數據庫字符串的字符結果:如何使用Strpos而不是While語句從MySQL DB中選擇結果?

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

我有它基本上查詢整個表:

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

然後跑了同時查看哪些結果包含輸入的字符:

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查詢中嗎?

任何幫助是極大的讚賞,

泰勒

回答

2

這似乎是非常低效的。你爲什麼不簡單讓數據庫去搜索你?

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

然後只是循環遍歷結果。

+0

謝謝。我以上述方式做這件事感覺很蠢。我想知道,什麼是addslashes()爲? – TaylorMac 2011-05-13 21:51:03

+0

它在提供的字符串中轉義引號。永遠不要相信最終用戶。你想確保他們不會惹你的數據庫做他們不應該做的事情。如果你沒有addslashes(),用戶可以輸入''; DROP TABLE Events;'擺脫你的整個桌子。這將確保他們的報價逃脫,所以他們不能運行任何你不想要的東西。 – Crashspeeder 2011-05-13 23:17:57

2

你可以更新您的SQL以類似

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

確保雖然篩選SQL注入。

2

可以使用LIKE聲明:

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

凡特%人物說: 「任何長度的任何東西」;所以我們正在尋找什麼(或什麼都沒有),然後是字符串,然後是什麼(或什麼都沒有)。例如,搜索%f%將匹配foo,offaffirmative

就像一般建議一樣,我建議您使用php的MySQLi類;它是一個改進的版本(因此是i),並提供了準備好的語句,因此您不必過多擔心SQL注入。