Всем доброго дня. Столкнулся с проблемой в запросе. Делаю запрос, выдает ошибку. Подскажите где ошибся? Понимаю что истина где то рядом, но найти не могу Вот кусок кода: <code> $arr1 = [$poid, $pid, $opid1, 67, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; $arr2 = [$poid, $pid, $opid1, 66, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; $arr3 = [$poid, $pid, $opid1, 65, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; $arr4 = [$poid, $pid, $opid1, 65, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; $arr5 = [$poid, $pid, $opid1, 63, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; $arr6 = [$poid, $pid, $opid1, 69, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; $arr7 = [$poid, $pid, $opid1, 68, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; R::exec( 'INSERT INTO oc_product_option_value (product_option_id, product_id, option_id, option_value_id, quantity, subtract, price, price_prefix, points, points_prefix, weight, weight_prefix, default_status) VALUES (' . R::genSlots($arr1) . '), (' . R::genSlots($arr2) . '), (' . R::genSlots($arr3) . '), (' . R::genSlots($arr4) . '), (' . R::genSlots($arr5) . '), (' . R::genSlots($arr6) . '), (' . R::genSlots($arr7) . ')', [$arr1, $arr2, $arr3, $arr4, $arr5, $arr6, $arr7] ); </code> И вот ошибка: Fatal error: Uncaught [HY093] - SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens trace: #0 C:\xampp2\htdocs\red\rb.php(1253): RedBeanPHP\Driver\RPDO->runQuery('INSERT INTO oc_...', Array) #1 C:\xampp2\htdocs\red\rb.php(4285): RedBeanPHP\Driver\RPDO->Execute('INSERT INTO oc_...', Array) #2 C:\xampp2\htdocs\red\rb.php(12830): RedBeanPHP\Adapter\DBAdapter->exec('INSERT INTO oc_...', Array) #3 C:\xampp2\htdocs\red\rb.php(13877): RedBeanPHP\Facade::query('exec', 'INSERT INTO oc_...', Array) #4 C:\xampp2\htdocs\red\option.php(131): RedBeanPHP\Facade::exec('INSERT INTO oc_...', Array) #5 {main} thrown in C:\xampp2\htdocs\red\rb.php on line 834 Буду очень признателен за помощь. Спасибо
Если бы правильно использовал, то запрос бы выполнился А так ошибки Понимаю что не правильно, поэтому и обратился к знатокам, чтобы подсказали где что поправить - чтобы было правильно Если знаешь - подскажи
С помощью echo выведите ваш запрос на страницу. Методом copy\paste перенесите его в phpmyadmin, и выполните его там. И всё сразу прояснится.
я правильно понимаю, вы предлагаете мне вывести вот это: R::exec( 'INSERT INTO oc_product_option_value (product_option_id, product_id, option_id, option_value_id, quantity, subtract, price, price_prefix, points, points_prefix, weight, weight_prefix, default_status) VALUES (' . R::genSlots($arr1) . '), (' . R::genSlots($arr2) . '), (' . R::genSlots($arr3) . '), (' . R::genSlots($arr4) . '), (' . R::genSlots($arr5) . '), (' . R::genSlots($arr6) . '), (' . R::genSlots($arr7) . ')', [$arr1, $arr2, $arr3, $arr4, $arr5, $arr6, $arr7] ); или я чего не понимаю как надо сделать..... --- Добавлено --- Метод genSlots() должен распарсить в 13 значений, то что я в массив положил Понимаю что там ошибка - знаний не хватает чтобы понять какие значения в массиве лишние для запроса --- Добавлено --- 7 строк, - 7 массивов , в каждом массиве 13 значений я так посчитал что правильно
7 строк подставляет из массива в подготовленный запрос значения --- Добавлено --- вот тут она https://redbeanphp.com/index.php?p=/finding
Да, не на тот момент внимание обратил В запросе подставляется 7*13 знаков вопросов. Для каждого из них должно быть соответствующее значение в массиве "привязанных элементов". Вы же передаёте двумерный массив. Надо объединить эти 7 массивов в один и результат использовать в качестве параметра (не обрамляя его дополнительно скобками квадратными).
gj Понимаю ход ваших мыслей, но в самом запросе в каждой строке вызывается функция со своим значением типа того: (' . R::genSlots($arr4) . ') Не могу сообразить, как тут поступить. Ведь если 7 массивов объединить в 1 , а саму функцию вызывать 7 раз - ерунда получится Или не так? --- Добавлено --- Вывел. Как и ожидалось - вот такая строка выводится в браузере : ?,?,?,?,?,?,?,?,?,?,?,?,? То же количество параметров 13 штук, как и здесь: $arr1 = [$poid, $pid, $opid1, 67, '100.00', 0, '0.0000', '+', 0, '+', '0.00000000', '+', 0]; пока не понимаю куда двигаться дальше, где копать но, будем искать
@Иван Сила, на каждый знак ? должен быть один элемент массива связываемых значений. Ошибка ведь такова: "number of bound variables does not match number of tokens" --- Добавлено --- Этот "элемент массива" может быть массивом только в случае, если дополнительно указывается тип (строка, целое число...) связываемого значения