无法使PHP PDO和OOP类工作

时间:2015-05-12 05:44:02

标签: php mysql class oop pdo

我正在尝试学习如何使用PHP PDO作为面向对象的编程。

我尝试过以下两个教程: http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/ http://culttt.com/2012/09/24/prevent-php-sql-injection-with-pdo-prepared-statements/

但是我无法让任何一个人工作。

第二个提供了http://www.imavex.com/php-pdo-wrapper-class/预先编写的包装类class.db.php的下载链接

使用这个预先编写的包装器类并尝试像tutorial.php这样简单的事情(凭据已更改):

// Include the database class
include("class.db.php");

// Connect to database
$db = new db("mysql:host=localhost;dbname=my-db-name", "my-username", "my-password");

$results = $db->select("ad_publication");
print_r($results);

以上显示空白页。

我知道预编写的课程和上面例子的文本没有任何问题,因为它是直接从教程中复制出来的,评论充满了感谢和赞美。

我知道我的凭证没有错,因为这样可以正常工作:

try
{
    $pdo = new PDO('mysql:host=localhost;dbname=my-db-name', 'my-username', 'my-password');

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec('SET NAMES "utf8"');

    $output = 'Connection Successful';
    echo $output;
    }
    catch (PDOException $e)
    {
    $output = 'Unable to connect to the database server.' . $e->getMessage();
    echo $output;
    exit();
    }

输出Connection Successful

我的服务器正在运行PHP 5.5,上面示例中使用的表是InnoDB表。

当我运行示例select语句时,我的错误日志显示:

  

PHP注意:未定义的变量:第7行的/var/www/vhosts/mywebsite.com.au/httpdocs/booking/tutorial.php中的GhG678

第7行:

$db = new db("mysql:host=localhost;dbname=my-db-name", "my-username", "my-password");
  

PHP警告:在第18行的/var/www/vhosts/mywebsite.com.au/httpdocs/booking/class.db.php中从空值创建默认对象

第18行:

$this->error = $e->getMessage(); // (from public function __construct)`
  

PHP致命错误:在/var/www/vhosts/mywebsite.com.au/httpdocs/booking/tutorial.php上调用非对象上的成员函数select() 9

第9行:

$results = $db->select("ad_publication"); // (an existing table with data in it)

我只是看不出我的错误,特别是因为包装类不是我编写的而且没有其他人抱怨它(大量赞美)而且tutorial.php的内容是直接从只更改了表名的页面。

就像我说的,使用PDO连接并在没有包装类的情况下进行正常的PDO查询,可以正常工作。

这里的任何人都可以看到任何可能出错或知道我应该注意的事情吗?

1 个答案:

答案 0 :(得分:1)

我不知道为什么我为这个问题买了-1? 我认为它非常完整。

无论如何,感谢@Sean提供答案的线索。

我的密码实际上有一个$字符。

我的连接代码(如上所示)是:

$pdo = new PDO('mysql:host=localhost;dbname=my-db-name', 'my-username', 'my-password');

我使用的代码是:

$pdo = new PDO("mysql:host=localhost;dbname=my-db-name", "my-username", "my-password");

"字符更改为'即可立即投放。 密码是由我的主机(Plesk)自动生成的,我对PHP知之甚少,知道'"之间存在差异。我从来不知道为什么有些人会使用另一个人而有些人会使用另一个人。似乎我还有很多东西需要学习。

@Sean,因为你没有把它作为回复,我无法选择你的建议作为答案,所以我不知道如何给你积分,但是谢谢你非常指引我朝着正确的方向前进。