我有一个名为 username 的表,例如John Doe
,我想在 $username 的 php 操作中获取此值!我用这个
mysql_query("SELECT * FROM photos WHERE username = '$username'");
它工作正常。我将其用于搜索字段以返回不同的用户及其个人资料。问题是,我怎样才能只用名字进行搜索,John
然后他又给了我John Doe
。我不想创建名字和姓氏!
谢谢特德
SELECT * FROM photos WHERE username LIKE '%$username%';
关于安全性的一句话:如果 $username 是您网站中搜索字段的值,您应该正确转义给定的搜索模式,而不是让您的数据库注入。这可以通过以下代码简单地完成:
$escaped_username = mysql_real_escape_string($_REQUEST['username']);
mysql_query("SELECT * FROM photos WHERE username LIKE '%$escaped_username%'");
这将在您的表中执行安全搜索,可能只使用名字或姓氏。
图例: $_REQUEST['username'] 是您的搜索表单的值。
您可以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
如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
您可以LIKE
在查询中使用 MySQL 子句
SELECT * FROM photos WHERE username LIKE '$username%'
您可以使用 CONCAT 函数获取全名
SELECT CONCAT(First_name, ' ', Lastnale,)
FROM photos
WHERE username LIKE '$username%'