Вход | Регистрация


Массив в хранимой процедуре

Массив в хранимой процедуре
Я
   antihacker
 
12.03.18 - 13:55
Всем привет ! Я так понял нельзя из PHP передать массив в харимую процедуру. Как тогда можно это передатьв массив nomenclature в харимую процедуру ?


$nomenclature_list = array();

$www = '{"nomenclature": [{"nom_name":"aaaaaaaaaaaaaaaaaaaaa","nom_unit":"hhhhhhhh","nom_price":350.50,"nom_status":2}, {"nom_name":"545555","nom_unit":"iiii","nom_price":555.00,"nom_status":2}]}';

$www1 = json_decode($www, true);

foreach ($www1 as $person_name => $person_a)
{

foreach($person_a as $inner_key => $value)
{
$nomenclature_list[] = array
(
'nom_name' => $value['nom_name']
);
}

}
 
 
   antihacker
 
1 - 12.03.18 - 13:58
Ой $nomenclature_list
   antihacker
 
2 - 12.03.18 - 14:01
Или сразу передать JSON )
   antihacker
 
3 - 13.03.18 - 12:26
Помогите пожалуйста.
Вот код

    $ddd ='[{"nom_id":15745,"nom_name":"aaaaaaaaaaaaaaaaaaaaa","nom_unit":"hhhhhhhh","nom_price":350.50,"nom_status":2}, {"nom_id":15756,"nom_name":"545555","nom_unit":"iiii","nom_price":555.00,"nom_status":2}]';
  
    $mysqli->query("CALL prc_mass_nom_update(" . $ddd . ")") or die ("Query fail: " . mysqli_error($mysqlicon));

Не работает, потому что не может принять параметр.
А если открыть PHPMYADMIN и там запустить процедуру и вставить $ddd, то все работает прекрасно.

Как правильно передать в хранимую процедуру MYSQL ?

В хранимой процедуре только один входящий параметр. Больше ничего. Тип параметра JSON.
   FIXXXL
 
4 - 13.03.18 - 12:35
(3) ты из 1С передаешь? или 1С тут нипричем?
   Asmody
 
5 - 13.03.18 - 12:36
(4) А где в теме про 1С?
   FIXXXL
 
6 - 13.03.18 - 12:37
(5) вот и я спрашиваю "где?" :)
   FIXXXL
 
7 - 13.03.18 - 12:37
сорри, секцию не глянул
   antihacker
 
8 - 13.03.18 - 12:38
Это же раздел вебматсеринг
   Fragster
 
9 - 13.03.18 - 12:58
сообщение об ошибке товарищ майор будет читать? пусть он тогда и помогает.
   Fragster
 
10 - 13.03.18 - 13:00
ну и экранирование символов никто не отменял
 
 Рекламное место пустует
   antihacker
 
11 - 13.03.18 - 13:02
В том и дело, что оштбка ничегоне показывает. елси имел ввиду mysqli_error($mysqlicon));
   antihacker
 
12 - 13.03.18 - 13:06
А как экранировать ?
   antihacker
 
13 - 13.03.18 - 13:14
Точнее как привести в такой вид ?

'[{\"nom_id\":15745,\"nom_name\":\"cccccc h88888 XXXX\",\"nom_price\":666.00,\"nom_status\":1}, {\"nom_id\":15756,\"nom_name\":\"aaaaaaaaaaaa**********\",\"nom_price\":350.50,\"nom_status\":1}]'
   Fragster
 
14 - 13.03.18 - 14:44
   Fragster
 
15 - 13.03.18 - 14:45
ну и использовать вместо объекта прямо строку - это как-то не по человечески.
   Fragster
 
16 - 13.03.18 - 14:45
ну, или вместо хэшмассива
   Fragster
 
17 - 13.03.18 - 14:46
в общем похапэшного array
   Fragster
 
18 - 13.03.18 - 14:47
ну и использовать подстановку в текст запроса как в (0) - прямой путь к sql injection
   Asmody
 
19 - 13.03.18 - 14:57
$sql = 'CALL prc_mass_nom_update(?)';
$param = json_encode(<тут твой массив>);
$stmt = $mysqli->stmt_init();
if (($stmt->prepare($sql) === FALSE)
|| ($stmt->bind_param('s', $param) === FALSE)
|| ($stmt->execute() === FALSE)
|| (($result = $stmt->get_result()) === FALSE)
|| ($stmt->close() === FALSE)
) {
  die('Select Error (' . $stmt->errno . ') ' . $stmt->error);
}
$row = $result->fetch_row();
echo $row[0];
   Asmody
 
20 - 13.03.18 - 15:01
(19)+ Код поправил. Обновите.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует