Вызов функции-члена prepare () для необъекта

Этот код выдает ошибку: Неустранимая ошибка: вызов функции-члена prepare () для необъекта в C: \ xampp \ htdocs \ kohana \ application \ controllers \ phactory2_test.php в строке 16
Это пример из руководства Phactory: http://phactory.org/guide/#phpunit-example

<?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 () возвращает NULL по какой-то причине

0

Решение

Вы должны добавить bind_param перед выполнением подготовленного оператора.

    $stmt = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ?");
$stmt->bind_param('i', $user_id);
$stmt->execute();

Это на MySQL соединении. Для pdo вы можете добавить

print_r($stmt->errorInfo());

Чтобы выяснить, в чем ваша проблема.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]