|
|
|
| Возникло два глупых вопроса:
1. При описании процедуры к которой обращается скрипт необходимо указывать абсолютно все переменные (основные и вспомогательные) или только входные из скрипта +выходные из функции самой базы?
2. Имена переменных в ocibindbyname обязательно должны совпадать или можно обозвать их по разному?
т.е как правильно
ocibindbyname($Statement,':alogin', $alogin);
ocibindbyname($Statement,':account', $alogin); | |
|
|
|
|
|
|
|
для: Nextia
(21.07.2010 в 02:42)
| | неужели никто не сталкивался? | |
|
|
|
|
|
|
|
для: Nextia
(26.07.2010 в 01:58)
| | oracle как то жирновато для пхп просто:) | |
|
|
|
|
|
|
|
для: nikita2206
(27.07.2010 в 14:28)
| | большая контора- проект не маленький база тоже не мелкая...
Простой вопрос - Oracle возвращает в переменную php строку (через ocibindbyname), как её распечатать???
обычный
print ($string); не работает :-( | |
|
|
|
|
|
|
|
для: Nextia
(28.07.2010 в 02:59)
| | вообще ничего не выдает? | |
|
|
|
|
|
|
|
для: Nextia
(28.07.2010 в 02:59)
| | ну разберитесь для начала что вообще возвращает ocibindbyname vardump'ом | |
|
|
|
|
|
|
|
для: nikita2206
(28.07.2010 в 20:00)
| | спасибо за точку поиска.
заработало.
Просто оказывается работа связки oracle+PHP и сильно зависит от версий обоих компонентов.
В основном все найденные руководства базировались на 8-9 версии базы и 5,0 php
в последующих версиях изменилась методика работы ociexecute ($Statement, OCI_DEFAULT);
при добавлении oci_commit всё встало на свои места.
Оказалось базе плюс к этому надо отдавать и принимать жестко прописанный типы переменных в обеих составляющих. | |
|
|
|
|
|
|
|
для: Nextia
(29.07.2010 в 04:06)
| | Вернемся к нашим баранам (PHP+Oracle).
имеется база данных хранящая информацию о заявках .
Имеется форма в которой можно указать период по датам, за который заявки надо вывести пользователю на экран
$sur_date=date("Y.m.d");
$start_day=$_REQUEST['start_day'];
$start_month=$_REQUEST['start_month'];
$start_year=$_REQUEST['start_year'];
$start_date= $start_year.".".$start_month.".".$start_day;
//собрали начало периода из формы
#print($start_date);
$finish_day=$_REQUEST['finish_day'];
$finish_month=$_REQUEST['finish_month'];
$finish_year=$_REQUEST['finish_year'];
$finish_date=$finish_year.".".$finish_month.".".$finish_day;
//собрали конец периода из формы
$dbh=oci_connect //тут всякие условия соединения или не соединения
$Statement=oci_parse($dbh,$search_query);
ocibindbyname($Statement,':id', $id_z1,11); //строка
ocibindbyname($Statement,':NAME', $face,50); //строка
ocibindbyname($Statement,':problem', $problem,32); //строка
ocibindbyname($Statement,':c_tel', $stels,16); // строка
ocibindbyname($Statement,':c_email', $smail,50); //
ocibindbyname($Statement,':note', $klyayza,512);
ocibindbyname($Statement,':dat_beg', $start,20);
ocibindbyname($Statement,':dat_end',$deadline,20);
ocibindbyname($Statement,':ret',$errors, 4); //число
ociexecute ($Statement, OCI_DEFAULT);
$commited=oci_commit($dbh);
if ($start_date<=$start<=$finish_date)
{// красивая табличка по результатам
} else {print ("Заявки за данный период отсутствуют. <br/> Отчет сформирован".$sur_date); }
|
помогите правильно сформировать условия для выборки
$start_date<=$start<=$finish_date -это точно ошибочное | |
|
|
|
|
|
|
|
для: Nextia
(13.10.2010 в 08:20)
| | a <= b <= с в большинстве С-подобных языков программирования воспринимается как вычисление промежуточного операнда x, принимающего значение 0 или 1 :
и сравнение уже с этим операндом:
Вы, вероятно, ждете выполнения обоих условий одновременно: | |
|
|
|
|
|
|
|
для: Trianon
(13.10.2010 в 09:00)
| | Спасибо огромное за разъяснение!
буду пробовать | |
|
|
|
|
|
|
|
для: Nextia
(13.10.2010 в 09:42)
| | В общем, нашли иезуитское решение:
session_start();
//ничего не проверяем - из select -а приходят только возможные значения
$sur_date=date("Y.m.d");
$start_day=$_REQUEST['start_day'];
$start_month=$_REQUEST['start_month'];
$start_year=$_REQUEST['start_year'];
$start_date= $start_year.".".$start_month.".".$start_day;
//собрали начало периода из формы
#print($start_date);
$finish_day=$_REQUEST['finish_day'];
$finish_month=$_REQUEST['finish_month'];
$finish_year=$_REQUEST['finish_year'];
$finish_date=$finish_year.".".$finish_month.".".$finish_day;
//собрали конец периода из формы
$dbh=oci_connect //тут всякие условия соединения или не соединения
//а счаз будет извращение-PLSQL запрос с переменными PHP
$query="select id, problem, date_begin, date_end from portal_zayav where to_date(date_begin)>to_date('".$start_date."','yyyy.mm.dd')and to_date(nvl(date_end,to_date('2010.01.01','yyyy.mm.dd')))<to_date('".$finish_date."','yyyy.mm.dd')order by date_begin";
$Statement=oci_parse($dbh,$query);
//а вот сейчас начнется самое интересное
ociexecute($Statement);
$nrows=oci_fetch_all($Statement, $res,null,null, OCI_FETCHSTATEMENT_BY_ROW);
print("Существует <h3>".$nrows."</h3>заявок за период с ".$start_date." по<br />".$finish_date."</br></br>");
//var_dump($res); требуется для отладки строки выше
echo("<table border='1' cellspacing='1' celpadding='1' width='500' align='center'>\n");
echo("<th>Номер заявки<td> Вид заявки</td><td> Дата открытия</td><td> Дата закрытия</td></th>");
foreach ($res as $col) {
echo "<tr>\n";
foreach ($col as $item) {
echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
}
print ("Отчет сформирован ".$sur_date."<br/></body></html>");
ocifreestatement($Statement);
ocilogoff ($dbh);
//грандиозная уборка мусора
session_destroy();
|
Вдруг кому-то такое же нечто потребуется :-) | |
|
|
|
|
|
|
|
для: Nextia
(18.10.2010 в 11:00)
| |
//массив $nevragi :он же хэш (ассоциативный массив), count не подходит
foreach ($nevragi as $q=>$a)
{
$querry="INSERT INTO LOG(NAME, LOG,ID_Q,ID_A,IP_USER,DAT) values('".$dlogin."','".$count."','".$q."','".$a."','".$keep."',to_date('".$sur_date."','dd.mm.yyyy'));";
//запрос правильный рабочий
print $querry."<br/>";
//сюда значения приходят верно, а до базы не добираются
$Statement=oci_parse($dbh,$querry);
oci_execute($Statement);
oci_commit($dbh);
ocifreestatement($Statement);
}
Помогите найти ошибку
|
| |
|
|
|
|
|
|
|
для: Nextia
(29.03.2012 в 08:16)
| |
$querry="INSERT INTO LOG(NAME, LOG,ID_Q,ID_A,IP_USER,DAT) values('".$dlogin."','".$count."','".$q."','".$a."','".$keep."',to_date('".$sur_date."','dd.mm.yyyy'))";
|
Только так и никак иначе :-) | |
|
|
|