如何选择包含名和姓的所有结果?

时间:2016-05-24 13:43:49

标签: php mysql

非常具体的问题,如何从$_SESSION中选择包含第一个,中间名和姓,只有名和姓的?

示例:

$_SESSION['NET']['USER']['NAME']的输出为'Robert Pasha Biceps'

我在SELECT上真正需要的是包含'Robert Biceps'

的所有内容
$pdo = new \PDO('mysql:host=localhost;dbname=workflow_teste', 'root', '');

$pdo->setAttribute(\PDO::ATTR_ERRMODE , \PDO::ERRMODE_EXCEPTION);

$string = "SELECT * FROM foo WHERE fooname LIKE '".$_SESSION['NET']['USER']['NAME']."' ";

$statement = $pdo->prepare($string);
$statement->execute();
$result = $statement->fetchAll();
$statement->closeCursor();

echo '<pre>';
var_dump($result);
die;

var_dump仅显示包含整个名称的结果,但有些人只提交名字和姓氏,我也需要结果......

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您需要展开会话并根据您的要求进行转换并将其传递给查询

$array = explode(' ', $_SESSION['NET']['USER']['NAME']);
$fooname = isset($array[0])?$array[0]:""." ". isset($array[2])?$array[2]:"";

并在你的mysql查询中使用这个$fooname。你的sql将是:

$sql = "SELECT * FROM foo WHERE fooname LIKE '%".$fooname."%' ";

答案 1 :(得分:2)

您需要将名称拆分为多个部分,并且只使用SQL查询中的第一个和最后一个部分。

$name = explode(' ', $_SESSION['NET']['USER']['NAME']);
$firstname = $name[0];
$lastname = $name[count($name)-1];
$string = "
    SELECT *
    FROM foo
    WHERE
        fooname LIKE '".$firstname." % ".$lastname."' OR
        fooname = '".$firstname." ".$lastname."'
";

从这些行:

  

Robert Pasha Biceps
  Robert Biceps
  Robert Middlename Biceps
  罗伯特帕夏   Pasha Biceps
  Robert Pasha Triceps
  罗伯特其他二头肌
  Roberto Pasha Triceps

名为&#34; Robert Pasha Biceps&#34;的查询将选择

  

Robert Pasha Biceps
  Robert Biceps
  Robert Middlename Biceps
  罗伯特其他二头肌

此外,您应该查找并使用准备好的陈述,以防止&#34; Bobby tables情况&#34;。

答案 2 :(得分:0)

您可以在SQL中使用%:

 $string = "SELECT * FROM foo WHERE fooname LIKE '%".$_SESSION['NET']['USER']['NAME']."%' ";

用这种方式如果使用类型名称的每个部分都可以看到结果。