我在这个问题上搜索了很多,但我找不到我的设置有什么问题。
我正在尝试使用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引擎
我没有收到任何结果或任何错误消息。
请帮助我指出什么是错的
谢谢
答案 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)");