iliapro
@iliapro
Веб-разработчик

В чём ошибка в mysql_query(" SELECT ")?

Есть mySQL таблица: id, prayer_id, position.
В php примерно такой код:
$battle = "1";
$player = "1";
//Здесь подключаюсь к базе данных
//$place - массив, преобразованный в строку функцией implode (элементы перечислены через запятую)
mysql_query(" SELECT position, player_id FROM battle WHERE id = '$battle' AND position IN('$place') AND player_id != '$player' ");

Вот, но выборка возвращает пустой ответ, хотя в таблице две записи:
1: id = 1, prayer_id = 1, position = 10352
2: id = 1, prayer_id = 2, position = 10352
В строке $place точно есть "10352" - проверил вдоль и поперёк.
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 3
alsopub
@alsopub
"$place - массив, преобразованный в строку функцией implode (элементы перечислены через запятую)"
Подозреваю что ошибка тут. Если все так как вы написали, то у вас получится position IN ('p1,p2,p3') вместо position IN ('p1', 'p2', 'p3').
Объединять надо не "через запятую", а через ', '
Ответ написан
0mm
@0mm
Попробуйте убрать одинарные кавычки внутри IN(), то есть код должен приобрести вид
mysql_query(" SELECT position, player_id FROM battle WHERE id = '$battle' AND position IN($place) AND player_id != '$player' ");

В противном случае в запросе вы получаете условие вида IN('123, 456, 789'), что совсем не то, чего вы ожидаете. Если position является целочисленным типом, то вам кавычки совсем не нужны. Кстати, они не нужны и во всех остальных случаях сравнения, если $battle и $player тоже целые числа. Кавычки используются только для строк.
Ответ написан
Winsik
@Winsik
сис.админ, недопрограммист :)
Кто ж так пишет ? заведите переменную , выводите её содержимое и смотрите как выглядит ваш запрос
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы