У меня есть образцы базы данных MySql со структурой и значениями, как показано ниже:
sno firstname status
1 John Active
2 Kelly Inactive
3 Harri Passive
4 Kris Dormant
Теперь, когда мне нужно выполнить запрос Sql со страницы PHP, а значения статуса — из нескольких флажков, которые я назначил в виде массива.
Я использовал функцию Implode для этого массива:
$status = $_POST['status'];
$mstat= implode (',', $status);
$query="SELECT * FROM USER WHERE status IN '$mstat'";
$result=mysql_query($query);
while ($members = mysql_fetch_assoc($result))
{
$fname= $members['firstname'];
echo $fname;
echo '</br>';
}
Проблема в том, что я не получаю никаких результатов. В чем может быть проблема. Или если кто-то может предложить / Совет для альтернативы.
Когда я echo $mstat;
я получил Active,Passive,Dormant
(Это основано на моем выборе флажка)
status
Строки Вы должны обернуть их quotes
, А также IN
потребности ()
обернуть строковые значения. Пытаться —
$mstat= "'" . implode ("','", $status) . "'";
$query="SELECT * FROM USER WHERE status IN ($mstat)";
Если предположить, $status
содержит некоторые или все эти значения, показанные в базе данных в формате массива.
Вот 100% рабочий ответ
$mstat= implode ("','", $status);
$query="SELECT * FROM USER WHERE status IN ('$mstat')";
IN работает следующим образом IN («Активный», «Пассивный», «Dormat»)
поэтому мы должны добавить » во все значения, что делается в функции implode.
Измените эту строку на:
$query="SELECT * FROM USER WHERE status IN ('$mstat')";
Аргумент должен в ()
!!!
КАЖДОЕ слово должно быть в »
лайк:
$ query = «SELECT * FROM USER WHERE status IN (‘Active’,» Inactive «)»
Вы можете изменить это как:
if ($mstat) $query .= ' ({$db->quote($status}) ';