Привязка для подготовки оператора с использованием mysqli работает нормально, когда я использую такой запрос
if ($stmt = $dbh->prepare("SELECT url, title, fulltxt FROM links WHERE id = ? ")){// do something}
Но он не работает, когда я использую этот запрос
if ($stmt = $dbh->prepare("SELECT url, title, fulltxt FROM links WHERE MATCH(fulltxt) AGAINST(?) ")) {//do something}
Как правильно использовать MATCH() AGAINST()
со знаком вопроса в запросе для привязки значения.
2 ответа
Новый полный код на основе pastebin:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<?php
error_reporting(-1);
// here the db details
$query = "%".$_GET['q']."%";
// Connecting to the server and selecting database
$dbh = new mysqli($host, $user, $password, $database);
if ($dbh->connect_error) {
echo 'Unable to connect to database '. $dbh->connect_error;
} else {
// run query to select records
if ($stmt = $dbh->prepare("SELECT url, title, fulltxt FROM links WHERE fulltxt LIKE ?")) {
// binding user-supplier input $class to the parameter as string
$stmt->bind_param("s", $query);
// executing the statement
$stmt->execute();
// binding the table columns Name and Email to the $Name and Email parameters respectively.
$stmt->bind_result($URL, $TITLE, $FULLTXT);
/* fetch associative array */
while ($stmt->fetch()) {
echo $URL. ' -- '. $TITLE. '<br />';
}
} else {
echo "Prepare failed: (" . $dbh->errno . ") " . $dbh->error;
}
}
?>
</body>
</html>
Проблема была устранена заменой MATCH на LIKE и объединением переменной с процентными символами с обеих сторон.
Это случилось со мной несколько недель назад, решение - попытаться экранировать строковую переменную с помощью \ (обратная косая черта). Это выглядит так:
$where = "'\"{$some_variable}\"'";
А затем свяжите параметр с переменной $ where:
$stmt = $dbh->prepare("SELECT url, title, fulltxt FROM links WHERE MATCH(fulltxt) AGAINST(? IN BOOLEAN MODE)");
$stmt->bind_param("s", $where);
$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
prepared failed
или результаты не возвращаются? Работает ли выполнение запроса в БД напрямую?