Гость
Покинул форум
Сообщений всего: 105
Дата рег-ции: Сент. 2012
Откуда: Екатеринбург
Помог: 0 раз(а)
|
Подскажите, не могу понять в чем ошибка.
В базе данных в таблице catalog есть четыре колонки: predmet1, predmet2, predmet3 и predmet4. Далее, существует массив $wasy(это для примера). Мне нужно составить массив, который получается из выборки таких строк таблицы catalog, чтобы хотя бы одна ячейка из predmet1, predmet2, predmet3 и predmet4 равнялась бы хотя бы одному элементу массива $wasy.
Далее я пишу такую программу:
PHP:
скопировать код в буфер обмена
<?PHP $wasy = array('Федя','Гриша ','Иван Иванович','Матвей'); ////////////////////////////////////////////////////////////// $abr = "SELECT * FROM catalog WHERE 'predmet1' IN ($w) or 'predmet2' IN ($w) or 'predmet3' IN ($w) or 'predmet4' IN ($w)"; $par[] = $roww; } ?>
Возникает ошибка:
PHP:
скопировать код в буфер обмена
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 'predmet2 'IN (Федя, Гриша , Ива' at line 1
Если я в массиве вместо 'Иван Иванович' пишу просто 'Иван', то ошибки нет. Значит ошибка возникает с появлением пробела между 'Иван' и 'Иванович'.
Убедительная просьба esterio не лезть с советами, т. к. он подсказал мне вместо
$w=implode(', ',$wasy);
поставить такое выражение:
$w = array_map('sprintf', array_fill(0, count($wasy), '"%s"'), array_values($wasy));
У меня прежняя ошибка пропала, но возникла новая:
Unknown column 'Array' in 'where clause'
Я сначала не знал что значит эта ошибка, но подумал что с ней легко справлюсь, и написал esterio, что все в порядке.
Когда разобрался, то оказалось, что в команде CELECT не может восприниматься IN, т. к.
переменная $w не строка, а esterio подсунул мне массив.
Как сделать так, чтобы пробел был, но ошибка не возникала бы.
|