为啥我不能在其他类或函数中使用我的 Propel ORM 类?
Posted
技术标签:
【中文标题】为啥我不能在其他类或函数中使用我的 Propel ORM 类?【英文标题】:Why can I not use my Propel ORM classes inside of other classes or functions?为什么我不能在其他类或函数中使用我的 Propel ORM 类? 【发布时间】:2012-02-08 11:19:47 【问题描述】:此代码有效:
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 ?>
我在日志文件中遇到的错误说
[2012 年 2 月 8 日星期三 03:03:02] [错误] [客户端 x.x.x.x] PHP 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个错误你的 SQL 语法;检查与您的 mysql 服务器版本相对应的手册,以在 /var/www/Propel/runtime/lib/query/ModelCriteria.php:1284 中的第 1 行的“FROM”附近使用正确的语法\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 语法有错误;检查第 1287 行 /var/www/Propel/runtime/lib/query/ModelCriteria.php 中与 yo 对应的手册
有更多 Propel ORM 经验的人可以告诉我如何在类或函数中使用 propel。只能以我提到的第一种方式使用它是行不通的。我只是使用直接的php。没有框架或其他任何东西。
【问题讨论】:
是我自己还是那个错误信息中有语法错误? 【参考方案1】:这里没有包括的是foo()
函数的实际调用,这可能隐藏了真正的问题。如果您从与包含 foo()
的文件所在的目录不同的目录调用它,则 $_SERVER['DOCUMENT_ROOT']
可能会有所不同,因此将您的 include_path
更改为实际上不指向 Propel 类。
在第 7 行设置 get_include_path()
后尝试打印出来,看看你有什么,确保 Propel 文件的完整路径是正确的。
【讨论】:
以上是关于为啥我不能在其他类或函数中使用我的 Propel ORM 类?的主要内容,如果未能解决你的问题,请参考以下文章