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

时间:2014-09-06 15:09:20

标签: php mysql pdo

我想在我的表格中使用两列。

tablename = 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。 号码是roomNo和房间名称的名称。

2 个答案:

答案 0 :(得分:4)

你必须为每个参数都有一个值,所以在参数值的数组中加倍你的searchfilter:

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

答案 1 :(得分:1)

您可以使用MySQL的MATCH结构:

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

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

中的数组

有关详细信息,请参阅here

Restrictions

  

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

来自docs

  

IN BOOLEAN MODE阻止仅按字词搜索,而是依据   字符串。