| 
    
        
     
     | 
    
  | 
Массив в хранимой процедуре | ☑ | ||
|---|---|---|---|---|
| 
    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)+ Код поправил. Обновите.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |