Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP+Oracle
 
 автор: Nextia   (21.07.2010 в 02:42)   письмо автору
 
 

Возникло два глупых вопроса:
1. При описании процедуры к которой обращается скрипт необходимо указывать абсолютно все переменные (основные и вспомогательные) или только входные из скрипта +выходные из функции самой базы?
2. Имена переменных в ocibindbyname обязательно должны совпадать или можно обозвать их по разному?
т.е как правильно
ocibindbyname($Statement,':alogin', $alogin);
ocibindbyname($Statement,':account', $alogin);

  Ответить  
 
 автор: Nextia   (26.07.2010 в 01:58)   письмо автору
 
   для: Nextia   (21.07.2010 в 02:42)
 

неужели никто не сталкивался?

  Ответить  
 
 автор: nikita2206   (27.07.2010 в 14:28)   письмо автору
 
   для: Nextia   (26.07.2010 в 01:58)
 

oracle как то жирновато для пхп просто:)

  Ответить  
 
 автор: Nextia   (28.07.2010 в 02:59)   письмо автору
 
   для: nikita2206   (27.07.2010 в 14:28)
 

большая контора- проект не маленький база тоже не мелкая...
Простой вопрос - Oracle возвращает в переменную php строку (через ocibindbyname), как её распечатать???
обычный
print ($string); не работает :-(

  Ответить  
 
 автор: psychomc   (28.07.2010 в 10:05)   письмо автору
 
   для: Nextia   (28.07.2010 в 02:59)
 

вообще ничего не выдает?

  Ответить  
 
 автор: nikita2206   (28.07.2010 в 20:00)   письмо автору
 
   для: Nextia   (28.07.2010 в 02:59)
 

ну разберитесь для начала что вообще возвращает ocibindbyname vardump'ом

  Ответить  
 
 автор: Nextia   (29.07.2010 в 04:06)   письмо автору
 
   для: nikita2206   (28.07.2010 в 20:00)
 

спасибо за точку поиска.
заработало.
Просто оказывается работа связки oracle+PHP и сильно зависит от версий обоих компонентов.
В основном все найденные руководства базировались на 8-9 версии базы и 5,0 php
в последующих версиях изменилась методика работы ociexecute ($Statement, OCI_DEFAULT);
при добавлении oci_commit всё встало на свои места.
Оказалось базе плюс к этому надо отдавать и принимать жестко прописанный типы переменных в обеих составляющих.

  Ответить  
 
 автор: Nextia   (13.10.2010 в 08:20)   письмо автору
 
   для: 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 -это точно ошибочное

  Ответить  
 
 автор: Trianon   (13.10.2010 в 09:00)   письмо автору
 
   для: Nextia   (13.10.2010 в 08:20)
 

a <= b <= с в большинстве С-подобных языков программирования воспринимается как вычисление промежуточного операнда x, принимающего значение 0 или 1 :
x=  (a<=b);

и сравнение уже с этим операндом:
x <= c

Вы, вероятно, ждете выполнения обоих условий одновременно:
a <= b &&  b <= с

  Ответить  
 
 автор: Nextia   (13.10.2010 в 09:42)   письмо автору
 
   для: Trianon   (13.10.2010 в 09:00)
 

Спасибо огромное за разъяснение!
буду пробовать

  Ответить  
 
 автор: Nextia   (18.10.2010 в 11: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>заявок за период с&nbsp;".$start_date."&nbsp;по<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) : "&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

     }
     print ("Отчет сформирован&nbsp;".$sur_date."<br/></body></html>");
     ocifreestatement($Statement);
    ocilogoff ($dbh); 
//грандиозная уборка мусора
session_destroy();

Вдруг кому-то такое же нечто потребуется :-)

  Ответить  
 
 автор: Nextia   (29.03.2012 в 08:16)   письмо автору
 
   для: 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   (25.04.2012 в 04:52)   письмо автору
 
   для: 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'))";

Только так и никак иначе :-)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования