Я пробую результаты из БД для автозаполнения поиска.
Я использую этот код для получения имен,
в БД у меня есть строка с четырьмя столбцами, которые могут содержать искомое ключевое слово.
function search_results($conn,$str){
$sql = "SELECT g_custom_1 as str FROM gallery WHERE g_custom_1 LIKE '%{$str}%'";
$sql .= "SELECT g_custom_2 as str FROM gallery WHERE g_custom_2 LIKE '%{$str}%'";
$sql .= "SELECT g_custom_3 as str FROM gallery WHERE g_custom_3 LIKE '%{$str}%'";
$sql .= "SELECT g_custom_4 as str FROM gallery WHERE g_custom_4 LIKE '%{$str}%'";//$sub_data=array();
if (mysqli_multi_query($conn,$sql))
{
$data=array();
do
{
// Store first result set
if ($result=mysqli_store_result($conn)) {
// Fetch one and one row
while ($row=mysqli_fetch_row($result))
{
$data[]=$row['str'];
}
// Free result set
mysqli_free_result($result);
}
}
while (mysqli_next_result($conn));
}
else{
echo "error";
}
$data_unique=array_unique($data);
return $data_unique;
}
Вы должны разделять каждый запрос, используя точку с запятой. Вот ваша текущая строка:
$sql="SELECT g_custom_1 as str FROM gallery WHERE g_custom_1 LIKE '%{$str}%'SELECT g_custom_2 as str FROM gallery WHERE g_custom_2 LIKE '%{$str}%'SELECT g_custom_3 as str FROM gallery WHERE g_custom_3 LIKE '%{$str}%'SELECT g_custom_4 as str FROM gallery WHERE g_custom_4 LIKE '%{$str}%'";
Обратите внимание, как SELECT в последующих запросах врезался в заднюю часть предыдущего запроса?
Я мог бы предложить:
$sql[]="SELECT g_custom_1 as str FROM gallery WHERE g_custom_1 LIKE '%{$str}%'";
$sql[]="SELECT g_custom_2 as str FROM gallery WHERE g_custom_2 LIKE '%{$str}%'";
$sql[]="SELECT g_custom_3 as str FROM gallery WHERE g_custom_3 LIKE '%{$str}%'";
$sql[]="SELECT g_custom_4 as str FROM gallery WHERE g_custom_4 LIKE '%{$str}%'";
if(mysqli_multi_query($conn,implode(';',$sql))){
Вы также можете найти этот ответ информативным: Строгие стандарты: mysqli_next_result () ошибка с mysqli_multi_query
Других решений пока нет …