Возникли проблемы при работе с ассоциативным массивом в PHP с MySQL

У меня есть следующий код 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);

2

Решение

Выглядит так, как будто имя столбца из оператора union отличается от «name». Вставьте var_dump ($ row); в цикле while проверить правильное имя столбца; вам не понадобится оператор if.
Вы также можете заключить запрос в выборку и дать правильное имя столбцу, или вообще не использовать ассоциацию, использовать простой массив Inadad.

редактировать
Я обнаружил проблему, вы пропустили период объединения (.) При построении запроса в этой строке:

$query  = "SELECT desc4 FROM measures ";
0

Другие решения

mysqli_result :: fetch_assoc доступен только с php 5 … у вас более старая версия? Тогда лучше использовать

mysqli_result::fetch_all ( MYSQLI_ASSOC )
0

По вопросам рекламы [email protected]