Защо не мога да използвам моите класове Propel ORM вътре в други класове или функции?

Този код работи:

  1 <?
  2 
  5 require( '/var/www/Propel/runtime/lib/Propel.php' );
  6 // Initialize Propel with the runtime configuration
  7 Propel::init("/home/foo/Projects/bar/classes/orm/build/conf/myconfig-conf.php");
  8 // Add the generated 'classes' directory to the include path
  9 set_include_path( $_SERVER['DOCUMENT_ROOT'] . "/classes/orm/build/classes/" . get_include_path());
 10 
 11 $PQ = new ProjectsQuery();
 12 $projects = ProjectsQuery::create()->find();
 13 print_r( $projects );
 15 
 16 ?>

Въпреки това, ако поставя точно същия код вътре в клас или функция (ще използвам функция за този пример), получавам грешка и обектите не са print_r

  1 <?
  2 
  3 require( '/var/www/Propel/runtime/lib/Propel.php' );
  4 // Initialize Propel with the runtime configuration
  5 Propel::init("/home/foo/Projects/bar/classes/orm/build/conf/myconfig-conf.php");
  6 // Add the generated 'classes' directory to the include path
  7 set_include_path( $_SERVER['DOCUMENT_ROOT'] . "/classes/orm/build/classes/" . get_include_path());
  8 
  9     public function foo()
 10     {   
 11         $PQ = new ProjectsQuery();
 12         $projects = ProjectsQuery::create()->find();
 13         print_r( $projects );
 14     }   
 15 ?>   

Грешката, която получавам в регистрационния файл, казва

[Сряда, 8 февруари, 03:03:02 2012] [грешка] [клиент x.x.x.x] PHP Фатална грешка: Неуловено изключение „PDOException“ със съобщение „SQLSTATE[42000]: Синтактична грешка или нарушение на достъпа: 1064 Имате грешка в SQL синтаксиса ; проверете ръководството, което съответства на вашата версия на MySQL сървър за правилния синтаксис, който да използвате близо до „FROM“ на ред 1 в /var/www/Propel/runtime/lib/query/ModelCriteria.php:1284\nПроследяване на стека:\n# 0 /var/www/Propel/runtime/lib/query/ModelCriteria.php (1284): PDOStatement->execute()\n#1 /var/www/Propel/runtime/lib/query/ModelCriteria.php(1137) : ModelCriteria->doSelect(Object(PropelPDO))\n#2 /home/foo/Projects/bar/models/Projects.php(12): ModelCriteria->find()\n#3 /home/foo/Projects/ bar/controllers/Projects.php(11): foo()\n#4 /home/foo/Project s/bar/project-listings.php(6): Projects->__construct()\n#5 {main} \n\nСледващо изключение „PropelException“ със съобщение „Не може да се изпълни оператор SELECT [SELECT FROM] [обвито: SQLSTATE[42000]: Синтактична грешка или нарушение на достъпа: 1064 Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на yo в /var/www/Propel/runtime/lib/query/ModelCriteria.php на линия 1287

Може ли някой с повече опит с Propel ORM да ми каже как мога да използвам propel в клас или функция. Само възможността да го използвате по първия начин, който споменах, няма да работи. И аз просто използвам прав php. Без рамка или нещо друго.


person Chris D.    schedule 08.02.2012    source източник
comment
Само аз ли съм, или в това съобщение за грешка има синтактична грешка?   -  person Qiniso    schedule 13.09.2019


Отговори (1)


Това, което не включвате тук, е действителното извикване на функцията foo(), което може да крие истинския проблем. Ако го извикате от различна директория от тази, в която се намира файлът, съдържащ foo(), тогава $_SERVER['DOCUMENT_ROOT'] може да е различен, като по този начин промените вашия include_path така, че всъщност да не сочи към класовете Propel.

Опитайте да отпечатате get_include_path(), след като го зададете на ред 7 и вижте какво имате, уверете се, че пълният път до файловете на Propel е правилен.

person Jordan Kasper    schedule 07.01.2013