php - 是否可以在 PHP 查询中通过 MySQL 表搜索所有列,而无需输入每个列名称?

标签 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 '%" . $search. "%' OR [...]

最佳答案

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

无论如何,您可以让 php 为您构建查询。通过查询 information_schema 将所有列放入数组中,然后使用每个列名称创建一个字符串,如

"columnName LIKE '%$search%'"

然后在“OR”内爆它,如下所示:

//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
}

关于php - 是否可以在 PHP 查询中通过 MySQL 表搜索所有列,而无需输入每个列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494252/

相关文章:

php - 如何命名异常(PHP)?

mysql - 在 MySQL 中连接连续月份中日期不完整的行

php - 搜索多列,第一列中的几个词

python - 我如何有效地尝试在大量 XML 列表中查找大量单词

php - 将元素添加到作为对象属性的数组

php - 更改悬停时的背景颜色,jquery

php - php 中与 adodb 连接时出错

search - Cassandra全文搜索喜欢

php - mysql UNION 重复值

mysql - 替换mysql中的数字