1

我有一个名为 username 的表,例如John Doe,我想在 $username 的 php 操作中获取此值!我用这个

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

它工作正常。我将其用于搜索字段以返回不同的用户及其个人资料。问题是,我怎样才能只用名字进行搜索,John然后他又给了我John Doe。我不想创建名字和姓氏!

谢谢特德

4

5 回答 5

2
SELECT * FROM photos WHERE username LIKE '%$username%';
于 2013-03-14T09:47:02.330 回答
2

关于安全性的一句话:如果 $username 是您网站中搜索字段的值,您应该正确转义给定的搜索模式,而不是让您的数据库注入。这可以通过以下代码简单地完成:

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

这将在您的表中执行安全搜索,可能只使用名​​字或姓氏。

图例: $_REQUEST['username'] 是您的搜索表单的值。

于 2013-03-14T09:55:03.760 回答
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如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-03-14T09:47:20.347 回答
1

您可以LIKE在查询中使用 MySQL 子句

SELECT * FROM photos WHERE username LIKE '$username%'
于 2013-03-14T09:47:23.443 回答
0

您可以使用 CONCAT 函数获取全名

  SELECT CONCAT(First_name, ' ', Lastnale,) 
  FROM photos 
  WHERE username LIKE '$username%'
于 2013-03-14T09:53:29.087 回答