Он работает для тривиальных случаев, и вы можете расширить его с помощью «автоматической генерации подготовленного заявления», однако он всегда имеет свои пределов.
Подход in () может быть достаточно хорош для некоторых случаев, но не для защиты от ракеты:)
Ракетно-защитное решение состоит в том, чтобы передать произвольное количество параметров в отдельный вызов (например, путем передачи клока параметров), а затем иметь представление (или любой другой способ) для представления их в SQL и использовать в вашем месте критерии.
Вариант грубой силы здесь http://tkyte.blogspot.hu/2006/06/varying-in-lists.html
Однако, если вы можете использовать PL / SQL, этот беспорядок может стать довольно опрятным.
function getCustomers(in_customerIdList clob) return sys_refcursor is
begin
aux_in_list.parse(in_customerIdList);
open res for
select *
from customer c,
in_list v
where c.customer_id=v.token;
return res;
end;
Затем вы можете передать произвольное количество идентификаторов клиентов, разделенных запятыми, в параметре и:
Трюк здесь:
Вид выглядит так:
create or replace view in_list
as
select
trim( substr (txt,
instr (txt, ',', 1, level ) + 1,
instr (txt, ',', 1, level+1)
- instr (txt, ',', 1, level) -1 ) ) as token
from (select ','||aux_in_list.getpayload||',' txt from dual)
connect by level <= length(aux_in_list.getpayload)-length(replace(aux_in_list.getpayload,',',''))+1
, где aux_in_list.getpayload ссылается на исходную строку ввода.
Возможным подходом было бы передать массивы pl / sql (поддерживаемые только Oracle), однако вы можете ' t использовать их в чистом SQL, поэтому шаг преобразования всегда необходим. Преобразование не может быть выполнено в SQL, поэтому, в конце концов, самым эффективным решением является передача clob со всеми параметрами в строке и преобразование его в представление.
stdClass
- это общий пустой класс PHP, вроде как Object
в Java или объект
в Python ( Изменить: ], но фактически не используется в качестве универсального базового класса; спасибо @Ciaran за указание на это ).
Это полезно для анонимных объектов, динамических свойств и т. д.
Простой способ Считайте, что StdClass является альтернативой ассоциативному массиву. См. Пример ниже, в котором показано, как json_decode ()
позволяет получить экземпляр StdClass или ассоциативный массив.
Также, но не показано в этом примере, SoapClient :: __ soapCall
возвращает экземпляр StdClass.
<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42
См. Динамические свойства в PHP и StdClass для дополнительных примеров.
stdClass
- это просто общий «пустой» класс, который используется при преобразовании других типов в объекты. Несмотря на то, что говорят два других ответа, stdClass
- это , а не базовый класс для объектов в PHP. Это можно продемонстрировать довольно легко:
class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'
Я не верю, что в PHP есть концепция базового объекта
Аналогично,
$myNewObj->setNewVar = 'newVal';
дает объект stdClass - автоматически приведенный
Я узнал это сегодня, написав с ошибкой:
$GLOBASLS['myObj']->myPropertyObj->myProperty = 'myVal';
Круто!