【问题标题】:Accessing private variable in PHP ( PDO) [closed]在 PHP(PDO)中访问私有变量 [关闭]
【发布时间】:2012-11-06 06:56:13
【问题描述】:

我在 PHP 中使用 PDO ...我有以下问题。

以下代码不起作用。

class A {
 private $getUsersQuery = "SELECT * FROM users";      
 ...
 public function getUsers() {       
   $DBH = A::getDatabaseConnection();           
   try {
      $query = $DBH->prepare($this->getUsersQuery); 
      ...
   } catch(PDOException $e) {}
 }
}

但如果我使用字符串,它就可以工作。

$DBH->prepare("SELECT * FROM users"); 

即使我在 prepare() 之外使用 echo,它也可以工作......

echo $this->getUsersQuery;   // Outputs the sql string.

谁能指出问题出在哪里。

更新:

错误:

SQLSTATE[42000]:语法错误或访问冲突:1065 查询为空

谢谢

【问题讨论】:

  • 同意它应该可以工作。您所说的“不起作用”到底是什么意思?有任何错误信息吗?
  • 这里最重要的问题是:它怎么不工作?您收到什么错误信息等?
  • 好吧,我不会说代码看起来很完美,但我们真的需要知道你遇到了什么错误。
  • 如何调用 getUsers() ?
  • try-catch 块仅在您对异常执行某些操作时才有用(即将错误消息输出到文件)。如果您使用它来隐藏错误消息,您将永远不知道为什么您的代码不起作用。

标签: php mysql string pdo


【解决方案1】:

正如您在评论中提到的,您对非静态方法进行了静态调用。

在这样调用的方法中使用 $this 没有任何意义:

$results = A::getUsers();

实例化你的类,然后调用类对象的方法。

$a = new A();
$a->getUsers();

或者使您的方法和 SQL 查询静态化。

【讨论】:

  • 非常感谢您的帮助...这解决了问题..
  • 原始代码是怎么解析的?
  • @MathieuImbert:Holy heck。真是令人遗憾的事态……
  • @MathieuImbert 即使在静态调用时调用 $this 也会引发致命错误。至少在我的 php 版本(5.3.10)
  • @iRaS 这个问题好像之前讨论过:stackoverflow.com/questions/2439036/…
【解决方案2】:

试试

$a = new A();
$result = $a->getUsers();

当您调用 A::getUsers() 时,$getUsersQuery 的值可能没有初始化。静态方法就是这么称呼的。

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 2011-04-12
    • 2015-11-27
    • 2013-02-17
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多