我有MySQL表,其中包含文件名和说明字段。 然后,我写了这个代码做LIKE搜索。 但是,我糟糕的代码无法执行我想要做的事情。
错误消息说
语法错误或访问冲突。
PHP 7.0 / MySQL 5.0.95是我的服务器。
$keywords = str_replace( "\xc2\xa0", " ", $keywords );
$keywords = preg_replace("/[\s]+/", " ", trim($keywords));
$keywordsarray = array_unique(explode(' ', $keywords));
$sql1 = "SELECT * FROM file_table WHERE ";
$sql2 = array();
$key = array();
foreach ($keywordsarray as $word) {
$sql2[] = " (filename LIKE ? OR describe LIKE ? )";
$key[] = '%'.$word.'%';
$key[] = '%'.$word.'%';
}
$builtsql = $sql1.implode(' AND ', $sql2);
$query = $db->prepare($builtsql);
$query->execute($key);
你能给我好主意吗?感谢。
答案 0 :(得分:1)
问题是由于未在您的查询中转义reserved word describe
而引起的。
您应该能够通过将列名包装在identifier quotes(反引号)中来解决语法错误问题。
$sql2[] = " (`filename` LIKE ? OR `describe` LIKE ? )";