2013-04-14 61 views
0

我想從與單詞相關的數據庫中獲取一個句子。 假設這裏是一個mysql表。SQL命令無法獲取與單詞相關的句子

id-  sentence 
1-  This is a web page 
2-  This is spiderweb 
3-  Here is a webspider  
4-  create anyWebPage 

這是一個簡單的代碼。

<?php 
    // ignore all syntax error in this code if present. 
    $input = 'web'; 
    $sql = mysql_query(" 
      SELECT * FROM `table_name` 
      WHERE sentence LIKE('%$input%') 
    "); 
// echo The given result. 
?> 

如果我使用LIKE %....%然後顯示所有結果。
如果我使用LIKE ...%然後,它不能給出任何結果,因爲沒有一句話是從$input = 'web';
開始我想那些在世界上是從網絡
所需的結果
1 - 這是一句開始一個網絡
3 - 這是一個webspider

請指引我,我怎樣才能像這些結果。
感謝........

回答

1

Quotes should be around %不在裏面,像LIKE('%$input%')。注意:您使用它的依賴,無論字符串比較是否collation is case sensitive or insensitive

默認字符集和校對規則是LATIN1和 latin1_swedish_ci,所以非二進制字符串比較是區分 默認情況下不區分大小寫。這意味着如果您使用col_name LIKE'a%'進行搜索,則會獲得以A或a開頭的所有列值。

mysql_已棄用,請使用mysqli_PDO::

你不是逃避輸入(SQL Injection)。

您聲明$inpput並使用$input

同時檢查FULLTEXT search options in MySQL的速度優化。

或者,如果你需要匹配全字只有你可以使用REGEXP這樣的:

SELECT * FROM test WHERE sentence REGEXP '([^[:alnum:]]|^)$input([^[:alnum:]]|$)' 

Example here 其中[^[:alnum:]]匹配除了數字和字母(昏迷,句號,破折號)的一切, ^/$分別開始/結束字符串。

[]剛剛引擎收錄,sqlfiddle被降權現在: -/

+0

它只得到一個結果 '1-這是一個網頁'但'3-這是一個webspider'也是一個需要的結果。 – Axeem

+0

ok,使用此命令給出一個要求的結果 'SELECT * FROM test WHERE語句REGEXP'([^ [:alnum:]] | ^)$ input'' – Axeem

0
$sql = mysql_query("SELECT * FROM `table_name` 
        WHERE sentence LIKE('% ". $input. "%')"); 

您應該添加空格字符。

+0

我想知道關於downvoting我,可能是有人沒有注意到我已經添加的空間字符。 :) – zavg

+2

['LIKE'在其語法中需要引號](http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html)。 – Vyktor

+0

@Vyktor啊,好的,謝謝你,Viktor! :) – zavg

0

看起來空格字符需要成爲WHERE LIKE標準的一部分。你可以把它放在%和網頁之間。

0

Nabheet的答案是正確的,但它忽略了字符串的第一個單詞以搜索詞開頭(例如「web」)的情況。這個查詢解決了這兩個情況:

$sql = mysql_query("SELECT * FROM `table_name` WHERE sentence LIKE "$input%" or sentence LIKE "% $input%" ;"); 

當句子的第一個字與搜索詞開始在此查詢的第一條將檢測,並能在任何換句話說與搜索開始的第二個子句將檢測術語。

其他答案是正確的指出消毒搜索術語以防止SQL注入的重要性。