#php #mysql
#php #mysql
Вопрос:
У меня есть таблица MYSQL со списком сервисов, которые предоставляет пользователь:
Значения Enum в этих столбцах могут быть 0 или 1. 0 представляет собой не предлагаемую услугу, а 1 представляет предлагаемую услугу.
Cleaning Tour Guide Cooking Parties
0 1 0 1
Затем я запускаю следующий запрос в MYSQL для извлечения моих строк в таблице:
<?php $myBio = $conn->query("SELECT * FROM user_data, user_services WHERE user_data.user_id = user_services.user_id AND user_id = $p_id");
if ($myBio->num_rows > 0) {
$row = $myBio->fetch_assoc();?>
Я хочу сгенерировать список предоставляемых пользователем сервисов (где значение сервиса больше 0) — и разделить список запятыми, вот так:
Tour Guide, Parties
Я пытаюсь сделать это с помощью массива:
$os = array(if($row['cleaning'] > 0) { echo 'cleaning';}, if($row['tour'] >0) { echo 'Tour Guide'; });
Я пытаюсь использовать операторы PHP if, чтобы расшифровать, равен ли сервис 0 или 1, прежде чем добавлять его в мой список.
Я не верю, что возможно комбинировать операторы php if внутри массива.
Пожалуйста, может кто-нибудь показать мне, как я могу достичь желаемого результата? Заранее спасибо
Комментарии:
1. ПРЕДУПРЕЖДЕНИЕ : По возможности используйте подготовленные инструкции , чтобы избежать введения произвольных данных в ваши запросы и создания ошибок SQL-инъекций . Это довольно просто сделать в
mysqli
и PDO , где любые предоставленные пользователем данные указываются с помощью индикатора?
or:name
, который позже заполняется с помощьюbind_param
orexecute
в зависимости от того, какой из них вы используете.
Ответ №1:
Использовать array_keys()
с необязательным параметром поиска:
$services = array_keys($row, 1);
Пример:
$row = [
'Cleaning' => 0,
'Tour Guide' => 1,
'Cooking' => 0,
'Parties' => 1,
];
$services = array_keys($row, 1);
var_export($services);
Результат:
array (
0 => 'Tour Guide',
1 => 'Parties',
)
Ответ №2:
Если столбцы вашей базы данных имеют говорящее имя, вы можете сделать это следующим образом:
<?php
$arrayServices = array();
$arrayAllServices = array('Cleaning','Tour Guide','Cooking','Parties');
foreach($arrayAllServices as $service) {
if($row[$service] > 0) {
$arrayServices[] = $service;
}
}
$sServices = join(', ', $arrayServices);
echo $sServices;
Если говорящие имена отличаются от имен столбцов, вам нужен второй массив для поиска переводов.
Ответ №3:
Достигнет ли что-то подобное того, чего вы хотите?
$results=array();
if ($row['cleaning']>0) $results[]='Cleaning';
if ($row['tour']>0) $results[]='Tour Guide';
// ...
Также, пожалуйста, обратите внимание на комментарий @tadman о подготовленных операторах!
Ответ №4:
<?php
$myResults = array();
$myBio = $conn->query("SELECT * FROM user_data, user_services WHERE user_data.user_id = ? AND user_id = ?");
$stmt->bind_param("ss",$user_services.user_id,$p_id);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows === 0) exit('No rows');
while($row = $result->fetch_assoc())
{
$tempArray = array();
$Cleaning = $row['Cleaning'];
$Tour_Guide = $row['TourGuide'];
$Cooking = $row['Cooking'];
$Parties = $row['Parties'];
if($Cleaning == 1)
array_push($tempArray,$Cleaning)
if($Cleaning == 1)
array_push($tempArray,$Cleaning)
if($Cooking == 1)
array_push($tempArray,$Cooking )
if($Parties == 1)
array_push($tempArray,$Parties )
array_push($myResults,$tempArray);
}
?>
Затем вы получите myResult
массив, который будет представлять собой множество массивов, затем вы можете перебирать подмассивы для проверки значений и построения строк, которые вы собираетесь создать.