2013-03-14 67 views
1

我有一個表稱爲用戶名具有例如John Doe,我想在$用戶名一個PHP的行動得到這個值!我用這個與表的MySQL查詢選擇定義字符串值

mysql_query("SELECT * FROM photos WHERE username = '$username'"); 

它工作正常。即時通訊使用此搜索字段返回不同的用戶和他們的個人資料。 問題是,我如何搜索例如只有名字John,他給我John Doe回來。 我不想創建名字和姓氏!

感謝泰德

+0

如果你想完全配對約翰李四那麼它是不可能的,但它想要的搜索約翰可以給兩個或三個結果說李四或史蒂夫約翰則可以使用if「喜歡」 ......告訴我你想要的查詢... – alwaysLearn 2013-03-14 09:50:29

回答

2
SELECT * FROM photos WHERE username LIKE '%$username%'; 
+1

正是我想要的! – supersize 2013-03-14 10:03:44

1

可以使用LIKE進行模式匹配,

SELECT * FROM photos WHERE username LIKE CONCAT('%','$username', '%') 

,但這是因爲它不會使用index造成執行FULL TABLE SCAN將執行在大型數據庫慢。

$query = "SELECT * FROM photos WHERE username LIKE CONCAT('%',$username, '%')" 
mysql_query($query); 

作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+0

嘿,非常感謝,我知道sql注入問題,並且我在這裏顯示的代碼更小一點!謝謝反正,正是我想要的:) – supersize 2013-03-14 10:02:59

1

您可以在查詢

SELECT * FROM photos WHERE username LIKE '$username%' 
0

您可以使用CONCAT函數獲取全名

SELECT CONCAT(First_name, ' ', Lastnale,) 
    FROM photos 
    WHERE username LIKE '$username%' 
2

隨着對安全字使用LIKE MySQL的條款:如果$ username是y中搜索字段的值我們的網站,您應該正確地轉義給定的搜索模式,而不是注入數據庫。這可以簡單地通過以下代碼完成:

$escaped_username = mysql_real_escape_string($_REQUEST['username']); 
mysql_query("SELECT * FROM photos WHERE username LIKE '%$escaped_username%'"); 

這將在您的表中執行安全搜索,並可能只使用名​​字或姓氏。

注:$ _REQUEST [ '用戶名']是搜索表單的價值。

+0

謝謝:)我知道! – supersize 2013-03-14 10:03:18