Я работаю над приложением Android, которое подключается к базе данных sql через файлы php. В настоящее время у меня проблемы с функцией like в одной из моих очередей.
Вот код файла, где проблема:
$con = mysqli_connect($host,$uname,$pwd,$db) or die("connection failed");
$like = $_REQUEST['like'];
$sql_q = mysqli_query($con,"SELECT `ID`, `Value`, `Value_Complete` FROM `products` WHERE `ID` LIKE '$like'");
if($sql_q)
{
while($result = mysqli_fetch_assoc($sql_q))
{
$output[] = $result;
}
if($output)
{
print(json_encode($output));
}
}
else
{
echo 'Invalid query: ' . mysqli_error() . "\n";
}
mysqli_close($con);
?>
Этот код работает с этим запросом — SELECT ID
, Value
, Value_Complete
ОТ products
ГДЕ ID
LIKE ’11 / 02 / __ / 00 /% ‘- и возвращает:
[{"ID":"11\/02\/00\/00\/00\/0\/0\/0","Value":"Tradicionais","Value_Complete":""},
{"ID":"11\/02\/01\/00\/00\/0\/0\/0","Value":"Caipis","Value_Complete":""},
{"ID":"11\/02\/02\/00\/00\/1\/0\/0","Value":"Daiquiri","Value_Complete":""},
{"ID":"11\/02\/03\/00\/00\/1\/0\/0","Value":"Gin Tonico","Value_Complete":""},
{"ID":"11\/02\/04\/00\/00\/1\/0\/0","Value":"Long Island Ice Tea","Value_Complete":""},
{"ID":"11\/02\/05\/00\/00\/1\/0\/0","Value":"Manhattan","Value_Complete":""},
{"ID":"11\/02\/06\/00\/00\/1\/0\/0","Value":"Margarita","Value_Complete":""},
{"ID":"11\/02\/07\/00\/00\/1\/0\/0","Value":"Martini Seco","Value_Complete":""},
{"ID":"11\/02\/08\/00\/00\/1\/0\/0","Value":"Black Russian","Value_Complete":""},
{"ID":"11\/02\/09\/00\/00\/1\/0\/0","Value":"White Russian","Value_Complete":""},
{"ID":"11\/02\/10\/00\/00\/1\/0\/0","Value":"Sex on the Beach","Value_Complete":""},
{"ID":"11\/02\/11\/00\/00\/1\/0\/0","Value":"Sidecar","Value_Complete":""},
{"ID":"11\/02\/12\/00\/00\/1\/0\/0","Value":"Sakerinha","Value_Complete":""},
{"ID":"11\/02\/13\/00\/00\/1\/0\/0","Value":"Tequila Sunrise","Value_Complete":""},
{"ID":"11\/02\/14\/00\/00\/0\/0\/0","Value":"Vodka","Value_Complete":""}]
Этот же запрос возвращает это в phpMyAdmin:
Однако тот же код не работает с запросом — SELECT ID
, Value
, Value_Complete
ОТ products
ГДЕ ID
LIKE ‘$ like’ Он возвращает пустой набор результатов, но в phpMyAdmin возвращает:
Я просто не могу понять проблему здесь … Даже это — ВЫБРАТЬ ID
, Value
, Value_Complete
ОТ products
ГДЕ ID
LIKE ‘%’ — ничего не возвращает, когда все должно вернуть.
Не могли бы вы помочь мне? Благодарю.
попробуйте изменить ваш запрос:
$con = mysqli_connect($host,$uname,$pwd,$db) or die("connection failed");
$like = $_REQUEST['like'];
$sql_q = mysqli_query($con,"SELECT `ID`, `Value`, `Value_Complete` FROM `products` WHERE `ID` LIKE '%".$like."%'");
if($sql_q)
{
while($result = mysqli_fetch_assoc($sql_q))
{
$output[] = $result;
}
if($output)
{
print(json_encode($output));
}
}
else
{
echo 'Invalid query: ' . mysqli_error() . "\n";
}
mysqli_close($con);
?>
По сути, что-то вроде работает как равно (=), но это дает вам гибкость в использовании группового символа. Подстановочный знак% используется для определения в SQL-запросе, что что-то есть, но не имеет значения.
Если вы не используете% с вашим запросом, это означает, что вы ищете ту же строку, которая хранится в переменной $ like.
В phpmyadmin вам не нужно использовать%. Потому что phpmyadmin разработан, чтобы сделать использование базы данных простым. Поэтому, когда вы выбираете вариант «как в поиске», он автоматически добавляет% перед применением запроса к базе данных.
По этой причине вы видите эти различия.
добавлять %
к переменной
"SELECT `ID`, `Value`, `Value_Complete` FROM `products` WHERE `ID` LIKE '$like%'"
Пожалуйста, попробуйте это полное решение в соответствии с вашими требованиями.
SELECT tablename FROM id WHERE FIND_IN_SET('/',$column name);
Он использует find_in_Set
Функция mysql, которая принимает 2 параметра, один из которых является разделителем, а другой — именем столбца.