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