[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка при составлении sql в массивах
Strannik
Здравстуйте.
Имею:

$mass=10,20,30,30,40;
$mas = array_unique($mass);
$line = count($mas);
$NEXT='WHERE';
for($i=0;$i<=$line;$i++)
{
if($i==0){$NEXT .='`id`='.$mas[$i];}
else if($i==$line){$NEXT .=' OR `id`='.$mas[$i];}
else {$NEXT .=' OR `id`='.$mas[$i];}
}

$sql="SELECT * FROM `product` ".$NEXT;
$res=mysql_query($sql) or die(mysql_error());



Попадаю на ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR `id`=20' at line 1


на выходе $sql выдает
SELECT * FROM `product` WHERE`id`=23 OR `id`=22 OR `id`= OR `id`=20

т.е. отсутствует 3 элемент массива.

вопрос почему учитываются все элементы первоначального массива, ведь я же сделал выборку $mas = array_unique($mass);

Как правильно написать?



Спустя 10 минут, 19 секунд (7.04.2012 - 00:11) dadli написал(а):
что ето ?
Цитата
$mass=10,20,30,30,40;

Спустя 5 минут, 28 секунд (7.04.2012 - 00:17) Strannik написал(а):
элементы массива

Спустя 29 секунд (7.04.2012 - 00:17) Jack_White написал(а):
массив не так объявляется
Цитата (Strannik @ 6.04.2012 - 21:01)
$mass=10,20,30,30,40;

а вот так тогда
$mass=Array(10,20,30,30,40);

в строке
Цитата (Strannik @ 6.04.2012 - 21:01)
$NEXT='WHERE';

после $NEXT='WHERE '; - пробел поставь а то сливается

Спустя 20 секунд (7.04.2012 - 00:17) Strannik написал(а):
т.е. мы сначала имеем один массив, затем из него выбираем уникальные значения

Спустя 2 минуты, 4 секунды (7.04.2012 - 00:19) Strannik написал(а):
там массив нормально объявляется, я привел как пример.
народ вы не туда смотрите!
ошибка в sql из за того, что отсутствует один из элементов массива, а массив уникальный и данный повторяющийся элемент вообще не должен учитываться, от и интересно почему он тоже считается в цикле...

SELECT * FROM `product` WHERE`id`=23 OR `id`=22 OR `id`= OR `id`=20

Спустя 7 минут, 6 секунд (7.04.2012 - 00:26) dadli написал(а):
Strannik
$mass=array(10,20,30,30,40);
$mas = array_unique($mass);
$line = implode(",",$mas);
$NEXT='WHERE id IN( '.$line.' )';

$sql="SELECT * FROM `product` ".$NEXT;
$res=mysql_query($sql) or die(mysql_error());

?

Спустя 1 минута, 21 секунда (7.04.2012 - 00:28) Jack_White написал(а):
Strannik
ну по коду что ты выложил тебе отписался приведи нормальный код, а то у тя в массиве одни значения а получаешь совсем другие
Цитата (Strannik @ 6.04.2012 - 21:01)
10,20,30,30,40

Цитата (Strannik @ 6.04.2012 - 21:01)
23 OR `id`=22 OR `id`= OR `id`=20


Спустя 14 минут, 30 секунд (7.04.2012 - 00:42) Placido написал(а):
Цитата (Strannik @ 6.04.2012 - 23:17)
т.е. мы сначала имеем один массив, затем из него выбираем уникальные значения

Значения то уникальные, но ключи остаются прежними (т.е. array(1 => 10, 2 => 20, 3 => 30, 5=> 40)wink.gif.
И, кстати, dadli дал хорошое решение.

Спустя 20 минут, 2 секунды (7.04.2012 - 01:02) Strannik написал(а):
спасибо народ) все получилось.
отдельное спасибо dadli за развитие познаний о массивах и Placido за намек о ключах.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.