Call to a member function bind_param() on a non-object
Well, one reason prepare()
can fail is if the sql statement sent to it is not valid in the current DB.
prepare()
will then return false.
Eg - if the table name is not correct or one or more field in the query does not exist.
as the error-message says, $qSelect
seems to be not an object. try to debug this by using var_dump($qSelect);
right after your prepare-call. also check if getDBH()
returns what you need.
sounds like the prepare-call fails (don't know why) and so it returns false
- false
is not an object, so you can't call bind_param()
on that.
EDIT: you havn't given the info, but it looks like you're using PHP's PDO. In that case, take a look at the documentation.
If the database server successfully prepares the statement, PDO::prepare() returns a PDOStatement object. If the database server cannot successfully prepare the statement, PDO::prepare() returns FALSE or emits PDOException (depending on error handling).
You should configure your server to return those PDO-Exceptions, which would tell you why the prepare call fails.
i'm using the mysqli approach as well and got the same error when I created another instance of mysqli before closing the first instance. So its important to use close()
before starting the same piece of code. For example:
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
$qSelect->close(); // <--- use close before calling the same function( wich contains $DBH code) again;