为什么我不能在其他类或函数中使用我的Propel ORM类?

时间:2012-02-08 11:19:48

标签: php orm propel

此代码有效:

  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 ?>   

我在日志文件中收到的错误是

  

[Wed Feb 08 03:03:02 2012] [error] [client xxxx] PHP致命错误:未捕获异常'PDOException',消息'SQLSTATE [42000]:语法错误或访问冲突:1064您有错误你的SQL语法;检查与您的MySQL服务器版本相对应的手册,以便在/var/www/Propel/runtime/lib/query/ModelCriteria.php:1284\nStack trace中使用正确的语法在第1行'FROM'附近使用:\ 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-&gt; doSelect(Object(PropelPDO))\ n#2 /home/foo/Projects/bar/models/Projects.php(12):ModelCriteria-&gt; find()\ n#3 / home / foo /Projects/bar/controllers/Projects.php(11):foo()\ n#4 / home / foo / Project s / bar / project-listings.php(6):Projects-&gt; __ construct()\ n# 5 {main} \ n \ n其他异常'PropelException',消息'无法执行SELECT语句[SELECT FROM] [wrapped:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法错误;检查第1287行/var/www/Propel/runtime/lib/query/ModelCriteria.php中与yo对应的手册

任何拥有更多Propel ORM经验的人都可以告诉我如何在类或函数中使用propel。只能以我提到的第一种方式使用它不会起作用。而我只是使用直接的PHP。没有框架或其他任何东西。

1 个答案:

答案 0 :(得分:0)

这里你不包括的是foo()函数的实际调用,这可能隐藏了真正的问题。如果您从与包含foo()的文件不同的目录中调用它,则$_SERVER['DOCUMENT_ROOT']可能会有所不同,从而将您的include_path更改为实际上不指向Propel类。

在第7行设置后,尝试打印get_include_path()并查看您的内容,确保Propel文件的完整路径正确无误。