У меня есть следующий код PHP, работающий с MySQL,
Что я хочу сделать, так это то, что для каждой строки $ я хотел бы поместить значение в столбец [‘name’] или в столбец [‘desc4’] в $ encode [] для отправки его обратно в javascript для обработки. похоже, это не работает (например, возвращает только результаты оператора else в цикле while), кто-нибудь может помочь?
Чтобы быть более понятным, есть смесь значений из столбца ‘name’ и ‘desc4’, поэтому я ожидаю увидеть смешанные результаты из операторов выбора, но мне кажется, что он никогда не входит в оператор ‘if’ в цикле while.
Есть ли способ проверить, содержит ли $ row конкретное имя столбца?
$qTerms=explode(' ', $q);
$q_bits = array();
$q_bits2 = array();
foreach ($qTerms as $term){
$term = sql_prep(trim($term));
if(!empty($term)){
$q_bits[] = "name LIKE '%{$term}%'";
}
}
foreach ($qTerms as $term2){
$term2 = sql_prep(trim($term2));
if(!empty($term2)){
$q_bits2[] = "desc4 LIKE '%{$term2}%'";
}
}
$query = "SELECT name FROM nutrients ";
$query .= "WHERE ".implode(' AND ', $q_bits);
$query .= " UNION ALL ";
$query .= "SELECT name FROM supplements ";
$query .= "WHERE ".implode(' AND ', $q_bits);
$query .= " UNION ALL ";
$query = "SELECT desc4 FROM measures ";
$query .= "WHERE ".implode(' AND ', $q_bits2);
$result = mysqli_query($connection, $query);
if(!$result){
die("Database query failed: ".mysqli_connect_error()."(".mysqli_connect_errno().")");
}
while($row = mysqli_fetch_assoc($result)){
//$encode[] = $row['name'];
if (in_array('name', $row)) {
$encode[] = $row['name'];
} else {
$encode[] = $row['desc4'];
}
}
mysqli_free_result($result);
echo json_encode($encode);
Выглядит так, как будто имя столбца из оператора union отличается от «name». Вставьте var_dump ($ row); в цикле while проверить правильное имя столбца; вам не понадобится оператор if.
Вы также можете заключить запрос в выборку и дать правильное имя столбцу, или вообще не использовать ассоциацию, использовать простой массив Inadad.
редактировать
Я обнаружил проблему, вы пропустили период объединения (.) При построении запроса в этой строке:
$query = "SELECT desc4 FROM measures ";
mysqli_result :: fetch_assoc доступен только с php 5 … у вас более старая версия? Тогда лучше использовать
mysqli_result::fetch_all ( MYSQLI_ASSOC )