Есть такой кусок кода: $sql = 'INSERT INTO `?#CATEGORIY_PRODUCT_TABLE` SET `categoryID` =?, `productID` =?@'; db_phquery($sql,$categoryID,$m_productID); Т.е. данный запрос вставляет в таблицу SQL значения `categoryID` =? и `productID` =?@' Вот здесь и возникает вопрос. `categoryID` =? - имеет всегда 1 значение `productID` =?@' - может содержать от 1 до нескольких (например 10), которые идут такпример): 22,33,44,55 если `productID` =?@' содержит 1 значения, конструкция срабатывает нормально, но если нет, то выбивает ошибку, т.к. SQL понимает только вставку по одному значению. На форуме SQL толком ничего сказать не могут. Значит я спрошу у гуру PHP. Так вот. Как мне переделать запрос указанный выше, чтоб выражение было (грубо говоря): $sql = 'INSERT INTO `?#CATEGORIY_PRODUCT_TABLE` SET `categoryID` ="Значение постоянное", `productID` ="значение1";" и т.д., пока в `productID` =?@' не закончатся значения.
вот ошибка 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 ''1634'' at line 1 при коде: INSERT INTO `SC_category_product` SET `categoryID` =555, `productID` ='1633','1634' т.е. второе значение и дальше SQL не берет сам код переменной: function move_selected_products(){ if(isset($_POST['categoryID'])){ $categoryID = intval($_POST['categoryID']); $current_categoryID = isset($_GET['categoryID'])?intval($_GET['categoryID']):false; $m_productID = array_keys(scanArrayKeysForID($this->getData(), 'selected_product')); $m_productID = array_map('intval',$m_productID); $m_productID = array_unique($m_productID); if(count($m_productID)){ if($current_categoryID) { $sql = 'INSERT INTO `?#CATEGORIY_PRODUCT_TABLE` SET `categoryID` =?, `productID` =?@'; db_phquery($sql,$categoryID,$m_productID); } else { $sql = 'INSERT INTO `?#CATEGORIY_PRODUCT_TABLE` SET `categoryID` =? WHERE `productID` IN (?@)'; db_phquery($sql,$categoryID,$m_productID); $sql = 'INSERT IGNORE INTO `?#CATEGORIY_PRODUCT_TABLE` (`productID`,`categoryID`) VALUES (?,?)'; foreach($m_productID as $productID) { db_phquery($sql,$productID,$categoryID); } /* INSERT INTO `mi`.`sc_category_product` (`productID`, `categoryID`) VALUES ('1243', '123');*/ } } } Добавлено спустя 50 секунд: смотрите все до {else}
Так а с какой радости "ему это брать". Если вы вот это пишите: `productID` ='1633','1634' Что вы от СУБД хотите? два значения в одно поле записать? Так не получится сделать.
Мне просто необходимо организовать цикл, чтоб в SQL отправлялось по 1-му значению. Откуда они берутся - не важно. Главное как ими дальше распорядится. Мне кажется алгоритм таков. Есть 2 переменные (А и Б). Значение (примерно) А=1, Б=1,2,3 (может Б=1 или Б=1,2,3,4). Берем переменную Н. Н = количество значений Б (которые идут через запятую) Переменная И = 1 Цикл пока И <= Н если ТАБЛИЦА (А,Б) <> А, Б (И) тогда вставка значения в ТАБЛИЦУ (А,Б) = А, Б(И) конец если И = И + 1 конец цикла