使用PHP和PDO进行全文搜索不返回任何结果

时间:2014-06-12 19:08:15

标签: php

我在这个问题上搜索了很多,但我找不到我的设置有什么问题。

我正在尝试使用PDO和PHP进行全文搜索,但我根本没有得到任何结果或错误消息。

我的表格包含客户详细信息:

id          int(11)          AUTO_INCREMENT      
name        varchar(150)         
lastname    varchar(150)         
company     varchar(250)         
adress      varchar(150)         
postcode    int(5)       
city        varchar(150)         
email       varchar(250)         
phone       varchar(20)      
orgnr       varchar(15)      
timestamp   timestamp        CURRENT_TIMESTAMP  

我确实运行了SQL查询:

ALTER TABLE system_customer ADD FULLTEXT(name, lastname, ... ...) 

除了列'id','postcode'和'timestamp'。到目前为止没有任何麻烦的迹象。

我不知道问题出在我的数据库配置还是我的PHP代码中,所以这里是PHP:

$STH =  $DBH->prepare("SELECT name,lastname,company,adress,city,phone,email,orgnr FROM '.$db_pre.'customer WHERE MATCH(name,lastname,company,adress,city,phone,email,orgnr) AGAINST(:search IN BOOLEAN MODE)");
//Bind placeholders
$STH->bindParam(':search', $data);
$STH->execute();
$rows = $STH->fetchAll();
//Just for testing
print_r($DBH->errorInfo());

if(empty($rows)) {
    echo '[.....]';
} else {
echo '[....]';
    foreach ($rows as $row) {
        echo '<tr data-href="new_order.php?cid='.$row['id'].'">';
        echo '<td>'.$row['name'].'</td>';
        echo '<td>'.$row['lastname'].'</td>';
        echo '<td>'.$row['company'].'</td>';
        echo '<td>'.$row['phone'].'</td>';
        echo '<td>'.$row['email'].'</td>';
        echo '<td>'.date("Y-m-d", strtotime($row['timestamp'])).'</td>';
        echo '</tr>';
    }
echo '[....]';
}

我尝试将searchquery中的参数更改为类似

的字符串
AGAINST('testcompany somename' IN BOOLEAN MODE)

我还读到,如果在50%或更多行中找到一个单词,则将其视为常用单词。我很确定这不是这种情况(使用非常具体的词语)

我的桌子使用MyISAM引擎

我没有收到任何结果或任何错误消息。

请帮助我指出什么是错的

谢谢

1 个答案:

答案 0 :(得分:2)

你的第一行错了:

$STH =  $DBH->prepare("SELECT name,lastname,company,adress,city,phone,email,orgnr
                       FROM '.$db_pre.'customer WHERE MATCH(name,lastname,company,adress,city,phone,email,orgnr) AGAINST(:search IN BOOLEAN MODE)");

要像你一样连接,你需要用双引号关闭字符串,或者直接将变量放在查询中:

$STH =  $DBH->prepare("SELECT name,lastname,company,adress,city,phone,email,orgnr
                       FROM ".$db_pre."customer WHERE MATCH(name,lastname,company,adress,city,phone,email,orgnr) AGAINST(:search IN BOOLEAN MODE)");

或:

$STH =  $DBH->prepare("SELECT name,lastname,company,adress,city,phone,email,orgnr
                       FROM {$db_pre}customer WHERE MATCH(name,lastname,company,adress,city,phone,email,orgnr) AGAINST(:search IN BOOLEAN MODE)");