此代碼出現錯誤:致命錯誤:調用成員函數prepare()在C:\ xampp \ htdocs \ kohana \ application \控制器\上線16
這是從Phactory導的例子phactory2_test.php:http://phactory.org/guide/#phpunit-example調用成員函數prepare()在非對象上
<?php
include_once('/simpletest/autorun.php');
require_once ('/Phactory/lib/Phactory.php');
/**
* This is the function we will test.
* It should retrieve a user from the db by id,
* and return that user's age.
*
* @param PDO $pdo
* @param int $user_id
* @return mixed The age of the user, or false if no user
*/
function getUserAge($pdo, $user_id)
{
$stmt = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ?");
$stmt->execute(array($user_id));
$user = $stmt->fetch();
if(false === $user) {
return false;
}
return $user['age'];
}
class UserTest extends UnitTestCase
{
public static function setUpBeforeClass()
{
// create a db connection and tell Phactory to use it
$pdo = new PDO('mysql:host=127.0.0.1; dbname=testdb', 'root', '');
Phactory::setConnection($pdo);
/**
* Normally you would not need to create a table here, and would use
* an existing table in your test database instead.
* For the sake of creating a self-contained example, we create
* the 'users' table here.
*/
$pdo->exec("CREATE TABLE `users` (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
// reset any existing blueprints and empty any tables Phactory has used
Phactory::reset();
// define default values for each user we will create
Phactory::define('user', array('name' => 'Test User $n', 'age' => 18));
}
public static function tearDownAfterClass()
{
Phactory::reset();
// since we created a table in this test, we must drop it as well
Phactory::getConnection()->exec("DROP TABLE `users`");
}
public function testGetUserAge()
{
// test that getUserAge() returns false for a nonexistent user
$age = getUserAge(Phactory::getConnection(), 0);
$this->assertFalse($age);
// create 20 users, with ages from 1-20
$users = array();
for($i = 1; $i <= 20; $i++)
{
// create a row in the db with age = $i, and store a Phactory_Row object
$users[] = Phactory::create('user', array('age' => $i));
}
// test that getUserAge() returns the correct age for each user
foreach($users as $user)
{
// Phactory_Row provides getId() which returns the value of the PK column
$user_id = $user->getId();
$age = getUserAge(Phactory::getConnection(), $user_id);
$this->assertEqual($user->age, $age);
}
}
}
?>
什麼是可能的原因是什麼?
謝謝
編輯:我發現了問題,Phactory ::的getConnection()由於某種原因
用try catch塊封閉與數據庫的所有交互。這樣做可以確保您可以在需要時退出捕獲腳本中的腳本,還可以讓您捕獲錯誤並重新拋出或打印出來。 嘗試{ //數據庫連接或查詢這裏 }趕上(PDOException $ E){ 回聲$ E->的getMessage(); } – Chris 2015-03-19 11:19:51