|   |   | 
| 
 | Массив в хранимой процедуре | ☑ | ||
|---|---|---|---|---|
| 0
    
        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'] ); } } | |||
| 1
    
        antihacker 12.03.18✎ 13:58 | 
        Ой $nomenclature_list     | |||
| 2
    
        antihacker 12.03.18✎ 14:01 | 
        Или сразу передать JSON )     | |||
| 3
    
        antihacker 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. | |||
| 4
    
        FIXXXL 13.03.18✎ 12:35 | 
        (3) ты из 1С передаешь? или 1С тут нипричем?     | |||
| 5
    
        Asmody 13.03.18✎ 12:36 | 
        (4) А где в теме про 1С?     | |||
| 6
    
        FIXXXL 13.03.18✎ 12:37 | 
        (5) вот и я спрашиваю "где?" :)     | |||
| 7
    
        FIXXXL 13.03.18✎ 12:37 | 
        сорри, секцию не глянул     | |||
| 8
    
        antihacker 13.03.18✎ 12:38 | 
        Это же раздел вебматсеринг     | |||
| 9
    
        Fragster гуру 13.03.18✎ 12:58 | 
        сообщение об ошибке товарищ майор будет читать? пусть он тогда и помогает.     | |||
| 10
    
        Fragster гуру 13.03.18✎ 13:00 | 
        ну и экранирование символов никто не отменял     | |||
| 11
    
        antihacker 13.03.18✎ 13:02 | 
        В том и дело, что оштбка ничегоне показывает. елси имел ввиду mysqli_error($mysqlicon));     | |||
| 12
    
        antihacker 13.03.18✎ 13:06 | 
        А как экранировать ?     | |||
| 13
    
        antihacker 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}]' | |||
| 14
    
        Fragster гуру 13.03.18✎ 14:44 | ||||
| 15
    
        Fragster гуру 13.03.18✎ 14:45 | 
        ну и использовать вместо объекта прямо строку - это как-то не по человечески.     | |||
| 16
    
        Fragster гуру 13.03.18✎ 14:45 | 
        ну, или вместо хэшмассива     | |||
| 17
    
        Fragster гуру 13.03.18✎ 14:46 | 
        в общем похапэшного array     | |||
| 18
    
        Fragster гуру 13.03.18✎ 14:47 | 
        ну и использовать подстановку в текст запроса как в (0) - прямой путь к sql injection     | |||
| 19
    
        Asmody 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]; | |||
| 20
    
        Asmody 13.03.18✎ 15:01 | 
        (19)+ Код поправил. Обновите.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |