开发者

Trouble with php (call to a member function on a non-object)

I am getting this php error and I can't see开发者_JS百科m to fix it.

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

here is the line that is calling function prepare.

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

and here is it being declared.

protected $statement;

any ideas?

Edit: Here is my full code (don't mind the testing dummies)

    <?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();
    }
}
}
?>


You assigned the local variable $statement. You need to set the instance's property using $this->statement.

In other words, change this:

$statement = $db_connect->stmt_init();

To this:

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

And this:

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

To this:

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

...and this:

$query = $statement->execute();

To this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜