<分区>
我正在尝试学习如何使用 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 查询,工作正常。
这里的任何人都可以看到任何可能出错的地方或知道我应该看的任何东西吗?