php - 无法让 PHP PDO 和 OOP 类工作

标签 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/

但我无法让它们中的任何一个正常工作。

第二个给出了一个预先编写的包装类 class.db.php 的下载链接,来自 http://www.imavex.com/php-pdo-wrapper-class/

使用这个预先编写的包装器类并尝试像这个 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();
    }

并输出连接成功

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

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

PHP Notice: Undefined variable: GhG678 in /var/www/vhosts/mywebsite.com.au/httpdocs/booking/tutorial.php on line 7

第 7 行:

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

PHP Warning: Creating default object from empty value in /var/www/vhosts/mywebsite.com.au/httpdocs/booking/class.db.php on line 18

第 18 行:

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

PHP Fatal error: Call to a member function select() on a non-object in /var/www/vhosts/mywebsite.com.au/httpdocs/booking/tutorial.php on line 9

第 9 行:

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

我只是看不出我做错了什么,尤其是包装类不是我写的,也没有其他人提示它(赞美之词),而且 tutorial.php 的内容是直接从仅更改表名的页面。

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

这里的任何人都可以看到任何可能出错的地方或知道我应该看的任何东西吗?

最佳答案

我不确定为什么我在这个问题上得了 -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,因为你没有把它作为回复,所以我无法选择你的建议作为答案,所以我不知道如何给你加分,但非常感谢你的指导正确的方向。

关于php - 无法让 PHP PDO 和 OOP 类工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182665/

相关文章:

php - 这个正则表达式在做什么?

php - 通过权限位掩码从 MySQL 数据库中选择用户?

php - MySql 不同的排序条件

c++ - 静态类成员上未解析的外部符号

java - Generic 的实例作为方法参数

javascript - 随机选择的名称显示在innerHTML中

mysql - 选择和分组范围

c# - 直接从 C# 连接对象中提取 MySql 连接 ID

php - 用 PHP 解码 NHL JSON 表

c++ - c++ 类型 'complex<double>' 类中的复杂初始化不提供调用运算符