Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.49.182] |
|
Сообщ.
#1
,
|
|
|
Подскажите пожалуйста синтаксис SQL запроса с параметром
|
Сообщ.
#2
,
|
|
|
http://www.qadram.com/vcl4php/docwiki/index.php/Database_Developer%27s_Guide:Parametrized_Queries
|
Сообщ.
#3
,
|
|
|
Спасибо
Добавлено эдж |
Сообщ.
#4
,
|
|
|
И все таки ничего не получается, к сожалению.
$hostel_con = GetDB_module()->Hostel_con; $hostel_con->Connected = False; $hostel_con->Connected = True; $sql = "select * from facultet where facultet_id = '?'"; $sql_params = array(); $sql_params[] = $_GET["facultet_id"]; $NewQuery = new IBQuery(); $NewQuery->LimitCount = 0; $NewQuery->Database = $hostel_con; $NewQuery->SQL = $sql; $NewQuery->prepare(); $NewQuery->Params = $sql_params; $NewQuery->open(); Выдает, что не знает поля под названием "?". И еще вопрос, как юзать именованные параметры? |
Сообщ.
#5
,
|
|
|
Цитата Gluckodrom @ $sql_params[] = $_GET["facultet_id"]; проверь в отладчике что $_GET["facultet_id"] имеет значение Цитата Gluckodrom @ $NewQuery->prepare(); $NewQuery->Params = $sql_params; местами поменяй я так вообще prepare не использую при этом его с большой буквы писать нужно |
Сообщ.
#6
,
|
|
|
Цитата vicis @ проверь в отладчике что $_GET["facultet_id"] имеет значение Там все верно, в значении имеет айдишник. Цитата vicis @ при этом его с большой буквы писать нужно Как оказалось, регистр значения не имеет. |
Сообщ.
#7
,
|
|
|
Только что выяснил, что если юзать не IB компоненты для связки c FirebBird, а обычный DataBase c выбранным драйвером ibase, то запрос с параметром, описанным в этом сообщении отрабатывает на ура! Так же и ХП.
И проблема корявости отображения OpenGrid'а (см.рисунок) при использовании не IB компонентов исчезла Просьба перенести в FAQ. Вопрос о том, как юзать именованные параметры остается! Может у кого-нить есть идеи. |
Сообщ.
#8
,
|
|
|
Цитата Gluckodrom @ Вопрос о том, как юзать именованные параметры остается! Может у кого-нить есть идеи. В делфи до этог омомента было так $sql = "select * from facultet where facultet_id = ':facultet_id'"; $sql_params = array("facultet_id"=>$_GET["facultet_id"]); в DelphiForPHP не пробовал. |
Сообщ.
#9
,
|
|
|
Цитата Gluckodrom @ Только что выяснил, что если юзать не IB компоненты для связки c FirebBird, а обычный DataBase c выбранным драйвером ibase, то запрос с параметром, описанным в этом сообщении отрабатывает на ура! Так же и ХП. И проблема корявости отображения OpenGrid'а (см.рисунок) при использовании не IB компонентов исчезла Просьба перенести в FAQ. думаю. что ответ здесь в сообщении установить easyGrid, OpenGrid (сообщение #2562262) там написано что работаеш с firebird т.к. нет такого драйвера то и стандартного способа нет несмотря на всю схожесть СУБД т.е. разработчик ничего не гарантирует а раз так то надо лезть в исходники при этом можно конечно перенести в FAQ но с таким же успехом можно написать что эти компоненты не работают с массой других СУБД |
Сообщ.
#10
,
|
|
|
Цитата ViktorXP @ В делфи до этог омомента было так Согласен, до этого всех клиентов БД на делфи писал, сейчас хочу перевести в веб. Но в D4php так не идет =( Еще вопрос с хранимой процедурой появился. О том что с ней все отрабатывает я поторопился. Ничего не происходит. $hostel_con = GetDB_module()->Hostel_con; $hostel_con->Connected = False; $hostel_con->Connected = True; $sql_params = array(); $sql_params[] = 6; // факультет id $sql_params[] = $this->LabeledEdit2->Text; // наименование $sql_params[] = null; // адрес $sql_params[] = null; // декан $sql_params[] = null; // контакты try { $NewSP = new StoredProc; $NewSP->LimitCount = -1; $NewSP->Database = $hostel_con; $NewSP->StoredProcName = "UPD_FACULTET"; $NewSP->Params = $sql_params; $NewSP->Database->BeginTrans(); $NewSP->Prepare(); $NewSP->Execute(); $NewSP->Database->CompleteTrans(); GetDB_module()->Q_facultet->Refresh(); } catch (Exception $e) { $NewSP->Database->CompleteTrans(); GetDB_module()->Q_facultet->Refresh(); echo $e; ?> alert('Ошибка ХП!'); <?php } |
Сообщ.
#11
,
|
|
|
Цитата Gluckodrom @ $NewSP->StoredProcName = "UPD_FACULTET"; 1.попробуй вызвать процедуру или sql запрос без массива параметров сформируй его руками например $facultet_id=5; $sql = "select * from facultet where facultet_id = '".$facultet_id."'"; или $sql = "select * from facultet where facultet_id = '$facultet_id'"; или ( $sql = "exec UPD_FACULTET $facultet_id,".$this->LabeledEdit2->Text; или $facultet_id=5; $d_name = 'Вася'; $sql = "select * from facultet where (facultet_id = $facultet_id) and (dekan_name like '%$d_name%')"; 2. значения null могут не подставится корректно опять же попробуй руками подставить 3. попробуй пример из поставки DelphiForPhp с хранимыми процедурами он у тебя работает или нет |
Сообщ.
#12
,
|
|
|
Цитата vicis @ сформируй его руками Ручками, само собой разумеется, все работает. Мое виденье, все должно крутиться в БД, а клиент только параметрами кидаться должен. По поводу ХП выяснил, что компонент SroredProc требует чтобы ему возвращали значение. В итоге, в конце процедуры изменения в SQL пришлось дописать безобидный код и все заработало. select 1 from rdb$database into :var; suspend; А вот при втором варианте отсюда, никакого возвращаемого значения, как правило, не потребовало! И еще вопрос, нужно ли BeginTrans(); CompleteTrans(); или и без этого все хорошо отрабатывает? |
Сообщ.
#13
,
|
|
|
Цитата Gluckodrom @ И еще вопрос, нужно ли BeginTrans(); CompleteTrans(); или и без этого все хорошо отрабатывает? зависит от степени ответственности запроса или нескольких запросов если не страшно для базы и всей задачи в целом что запрос почему то не выполнится то и ставить не обязательно иначе ставь в случае сбоя база откатится на состояние до начала транзакции в принципе это классическая теория про транзакции |