繁体   English   中英

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。 数字代表房间编号,名字代表房间名称。

您必须为每个参数都有一个值,因此,将参数的值数组中的searchfilter加倍:

$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禁止仅按单词搜索,但不能按字符串搜索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM