PDO为单个字符串的多个表列运行LIKE查询


PDO run LIKE query for multiple table columns for a single string

我现在想在表中的两列上使用like。

表名=roomnames

表列=roomIDroomNameroomNo

我有一个输入字段,它发送一个字符串值,查询应该在该字符串值上执行。

下面是PHP PDO代码

<?php
/**
 * Created by PhpStorm.
 * User: HaiderHassan
 * Date: 9/3/14
 * Time: 9:52 PM
 */
header('Access-Control-Allow-Origin: *');
try {
    $conn = new PDO('mysql:host=localhost;dbname=houserentsystem;charset=utf8', 'root', 'admin');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
if($_POST['searchFilter']){
    $searchFilter = $_POST['searchFilter'];
    $stmt = $conn->prepare("SELECT roomName, roomNo FROM roomnames WHERE roomName LIKE ? OR roomNo LIKE ?");
    $stmt->execute(array('%'.$searchFilter.'%'));
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $stmt->closeCursor();
    print_r(json_encode($results));
}

我尝试的查询是错误的,我现在尝试的就是不在这里工作。

$stmt = $conn->prepare("SELECT roomName, roomNo FROM roomnames WHERE roomName LIKE ? OR roomNo LIKE ?");
$stmt->execute(array('%'.$searchFilter.'%'));

我想如果我搜索房间编号或房间名称,它会显示数据库表中是否存在房间编号或名称的结果。

抱歉我英语不好。我希望我已经解释过了。我想在多个列中根据输入字符串搜索一个表,输入字符串可以是no或name。Number代表房间No,name代表房间名称。

每个参数都必须有一个值,所以在参数的值数组中加倍搜索过滤器:

$stmt = $conn->prepare("SELECT roomName, roomNo FROM roomnames WHERE roomName LIKE ? OR roomNo LIKE ?");
$stmt->execute(array('%'.$searchFilter.'%','%'.$searchFilter.'%' ));

您可以使用MySQL中的MATCH结构:

SELECT roomName, roomNo FROM roomnames WHERE MATCH (roomName, roomNo IN BOOLEAN MODE) AGAINST(?)

AGAINST(?)内部所需的参数将作为$stmt->execute(...) 内部的数组

有关更多信息,请参阅此处。

限制:

全文索引只能与MyISAM表一起使用。(在MySQL 5.6中以及以上,它们也可以与InnoDB表一起使用。)全文索引只能为CHAR、VARCHAR或TEXT列创建。

来自文档:

IN BOOLEAN MODE防止仅通过单词进行搜索,而是通过一串