是否可以在PHP查询中通过MySQL表搜索所有列,而不必键入每个列名?

是否可以在PHP查询中通过MySQL表搜索所有列,而不必键入每个列名?,php,mysql,search,sql-like,Php,Mysql,Search,Sql Like,我这样问是因为我正在寻找一个针对MySQL的PHP查询,如下所示: SELECT * FROM users WHERE ALL_COLUMNS LIKE '%" . $search . "%' 这样的查询存在吗?或者我必须这样键入查询: SELECT * FROM users WHERE user_email LIKE '%" . $search. "%' OR user_name LIKE '%" . $search. "%' OR first_name LIKE '

我这样问是因为我正在寻找一个针对MySQL的PHP查询,如下所示:

SELECT * FROM users WHERE ALL_COLUMNS LIKE '%" . $search . "%'
这样的查询存在吗?或者我必须这样键入查询:

SELECT * FROM users
WHERE
    user_email LIKE '%" . $search. "%'
    OR user_name LIKE '%" . $search. "%'
    OR first_name LIKE '%" . $search. "%' OR [...]

请注意,在您最喜欢的
mysql
frontend中,您可能可以实现类似的功能,我使用sqlyog,您可以使用“数据搜索”工具来实现,我相信其他软件(如mysql workbench)也有类似的选项

无论如何,您可以让php为您构造查询。通过查询
information\u schema
将所有列放入一个数组,然后用每个列的名称创建一个字符串,如下所示

"columnName LIKE '%$search%'"
然后
或“
上内爆,如下所示:

//what is the search?
$search = "something";
//get all the columns

    $columns = mysqli_query("SELECT 
  COLUMN_NAME 
FROM
  information_schema.COLUMNS 
WHERE TABLE_NAME = 'users' 
  AND TABLE_SCHEMA = 'yourDatabaseName' ");

//put each like clause in an array
$queryLikes = array();
while ($column = mysqli_fetch_assoc($columns)) {
    $queryLikes[] = $column['COLUMN_NAME'] . " LIKE '%$search%'";
}

$query = "SELECT * FROM users WHERE " . implode(" OR ", $queryLikes);
echo $query; //should look like this:
//SELECT * FROM users WHERE column1 LIKE '%something%' OR column2 LIKE '%something%' OR column3 LIKE '%something%' OR ...
//so then
$users=mysqli_query($query);
while ($user = mysqli_fetch_assoc($users)) {
    //do stuff with $user
}
很简单: 只需遍历表中的所有列,并检查它们是否为所需的值

此示例搜索标题为“column”的列


仅供参考,随着表大小的增加,这很可能会破坏您的性能。我认为这将是一个有用的查询,必须在多个表中使用它,并且表大小适中。我相对确定您要查找的内容不存在。它的实用性仅限于一些特定的边缘情况,在生产中运行这样的东西不是一个很好的主意。您可以让PHP为您生成sql查询,然后按此路线进行。也就是说,我不是DBA。最好有一个包含所有这些数据的合并字段,然后在其中添加一个
FULLTEXT
索引。
$qry= mysql_query("select * from $tblName order by id");
while($row = mysql_fetch_assoc($qry)){
    if($searchItem == $row['column']){
        echo "Match found!";
        break;
    }
}