我正在尝试使用MySQLi使用Sphinx Search查询我的数据库。
我试图实现的是用户输入一个术语,然后用于查询我的数据库,并返回值。然而,我得到了错误:
"调用非对象上的成员函数fetch_assoc()"
$conn = new mysqli('127.0.0.1', 'null', 'null', 'null', 9306);
if ($conn->connect_error) {
throw new Exception('Connection Error: ['.$conn->connect_errno.'] '.$conn->connect_error, $conn->connect_errno);
}
$term = $_GET['q'];
echo "$term";
$resource = $conn->query('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST ($term)');
$results = array();
while ($row = $resource->fetch_assoc()) {
$results[] = $row;
}
$resource->free_result();
var_dump($results);
违规行似乎是:
$resource = $conn->query('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST ($term)');
如果我将线路更改为:
$resource = $conn->query('SELECT * FROM test1')
查询运行良好,但我需要查询与$term匹配,但我在这样做时遇到了问题,我不明白为什么。
您没有引用您放入查询中的内容。
即使你是,它也可能不起作用。或者,它可能只是删除您的整个数据集!如果要将用户输入的数据放入数据库,则必须小心。使用准备好的查询;如果你需要我的建议,那就放弃mysqlineneneba API,转移到PDO这样的更高级别。
$conn = new mysqli('127.0.0.1', 'null', 'null', 'null', 9306);
if ($conn->connect_error) {
throw new Exception('Connection Error: ['.$conn->connect_errno.'] '.$conn->connect_error, $conn->connect_errno);
}
$term = $_GET['q'];
echo "$term";
$statement = $conn->prepare('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST (?)');
$statement->bind_param("s", $term);
$statement->execute();
$result = $statement->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
$results[] = $row;
}
var_dump($results);
$resource = $conn->query('SELECT * FROM test1 WHERE MATCH (title, description) AGAINST ($term)');
这是一个MySQL查询。这就是MySQL用于运行全文查询的语法。
您正在连接到Sphinx(9306端口提供了它),因此应该运行SphinxQL。
查找SphinxQL的SELECT
语法。。。http://sphinxsearch.com/docs/current.html#sphinxql-选择