Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用表的mysql查询选择定义的字符串值_Php_Mysql - Fatal编程技术网

Php 使用表的mysql查询选择定义的字符串值

Php 使用表的mysql查询选择定义的字符串值,php,mysql,Php,Mysql,我有一个名为username的表,它有例如johndoe,我想在php操作中为$username获取这个值!我用这个 mysql_query("SELECT * FROM photos WHERE username = '$username'"); 它很好用。我使用这个搜索字段返回不同的用户和他们的个人资料。 问题是,我如何才能搜索,例如只搜索名字John,他还给我johndoe。 我不想创造一个名字和姓氏 感谢Ted您可以像一样使用进行模式匹配 SELECT * FROM photos WH

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

mysql_query("SELECT * FROM photos WHERE username = '$username'");
它很好用。我使用这个搜索字段返回不同的用户和他们的个人资料。 问题是,我如何才能搜索,例如只搜索名字
John
,他还给我
johndoe
。 我不想创造一个名字和姓氏


感谢Ted

您可以像一样使用
进行模式匹配

SELECT * FROM photos WHERE username LIKE '%$username%';
SELECT * FROM photos WHERE username LIKE CONCAT('%','$username', '%')
但这在大型数据库中执行速度较慢,因为它不会使用
索引
,导致执行
全表扫描

$query = "SELECT * FROM photos WHERE username LIKE CONCAT('%',$username, '%')"
mysql_query($query);
作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用
PreparedStatements
可以避免在值周围使用单引号


您可以使用
一样进行模式匹配

SELECT * FROM photos WHERE username LIKE CONCAT('%','$username', '%')
但这在大型数据库中执行速度较慢,因为它不会使用
索引
,导致执行
全表扫描

$query = "SELECT * FROM photos WHERE username LIKE CONCAT('%',$username, '%')"
mysql_query($query);
作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用
PreparedStatements
可以避免在值周围使用单引号


您可以在查询中使用类似于
MySQL子句的

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

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

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

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

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

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

  SELECT CONCAT(First_name, ' ', Lastnale,) 
  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%'");
这将在您的表中执行安全搜索,可能只使用名字或姓氏


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

带有一个关于安全性的词:如果$username是您站点中搜索字段的值,您应该正确地转义给定的搜索模式,而不是插入数据库。这只需通过以下代码完成:

$escaped_username = mysql_real_escape_string($_REQUEST['username']);
mysql_query("SELECT * FROM photos WHERE username LIKE '%$escaped_username%'");
这将在您的表中执行安全搜索,可能只使用名字或姓氏


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

如果您希望完全匹配John和John Doe,则不可能,但希望搜索John可以给出两到三个结果,例如John Doe或Steve John,则可以使用“Like”。。。告诉我,如果你想查询…如果你想精确匹配约翰对约翰·多伊,那么这是不可能的,但它希望搜索约翰可以给出两个或三个结果,比如约翰·多伊或史蒂夫·约翰,那么可以使用“Like”。。。告诉我,如果你想查询…嘿,非常感谢,我知道sql注入的问题,我把代码稍微缩小了一点显示在这里!无论如何,谢谢你,这正是我想要的:)嘿,非常感谢,我知道sql注入的问题,我在这里显示的代码稍微小了一点!无论如何,谢谢你,这正是我想要的:)