Проблема с php (вызов функции-члена для необъекта) - PullRequest
0 голосов
/ 30 апреля 2011

Я получаю эту ошибку php и не могу ее исправить.

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\mlrst\database.php on line 26

вот строка, которая вызывает функцию prepare.

$this->statement->prepare($strQuery);

и вотэто объявляется.

protected $statement;

есть идеи?

Редактировать: Вот мой полный код (не берите в голову тестовые манекены)

    <?php

$d = new database(); // test

class database {

protected $db_connect;
protected $statement;

function database() {
    $db_connect = new MySQLi("localhost", "root" ,"", "test") or die("Could not connect to the server.");
    $statement = $db_connect->stmt_init();
    $this->preparedQuery("INSERT INTO feedback (name, feedback) VALUES ('?', '?')");
    $this->close();
    echo "Done!";
}

protected function cleanString($strLine) {
    $strCleansedLine = preg_replace("/[^a-zA-Z0-9\s]/", "", $strLine);
    return $strCleansedLine;
}

public function preparedQuery($strQuery, $parameters = NULL) {
    try {
        $this->statement->prepare($strQuery);
        $statement->bind_param("ss", $name, $feedback);

        for ($i = 0; $i < count($parameters); $i++) {

        }
        $name = $this->cleanString("this is my name");
        $feedback = $this->cleanString("this is some feedback");
        $query = $statement->execute();
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

protected function close() {
    try {
        if ($this->statement != NULL)
            $this->statement->close();
        if ($this->db_connect != NULL)
            $this->db_connect->close();
    } catch (Exception $e) {
        $e->getMessage();
    }
}
}
?>

1 Ответ

4 голосов
/ 30 апреля 2011

Вы назначили локальную переменную $statement. Вам необходимо установить свойство экземпляра, используя $this->statement.

Другими словами, измените это:

$statement = $db_connect->stmt_init();

К этому:

$this->statement = $db_connect->stmt_init();

А это:

$statement->bind_param("ss", $name, $feedback);

К этому:

$this->statement->bind_param("ss", $name, $feedback);

... и это:

$query = $statement->execute();

К этому:

$query = $this->statement->execute();
...