Fatal error: Call to a member function query() on a non-object on line:
$result = $conn->query($sql) or die(mysqli_error());
Who knows whats wrong and how to fix it?
<?php
function dbConnect($usertype, $connectionType = 'mysqli') {
$host = 'localhost';
$db = 'phpsols';
if ($usertype == 'read') {
$user = 'psread';
$pwd = '123';
} elseif ($usertype == 'write') {
$user = 'pswrite';
$pwd = '123';
} else {
exit('Unrecognized connection type');
}
if ($connectionType == 'mysqli') {
return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database');
} else {
try {
return new PDO("mysql:host=$host;dbname=$db", $user, $pwd);
} catch (PDOException $e) {
echo 'Cannot connect to database';
exit;
}
}
}
// connect to MySQL
$conn = dbConnect('read');
// prepare the SQL query
$sql = 'SELECT * FROM images';
// submit the query and capture the result
**$result = $conn->query($sql) or die(mysqli_error());**
// find out how many records were retrieved
$numRows = $result->num_rows;
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Connecting with MySQLi</title>
</head>
<body>
<p>A total of <?php echo $numRows; ?> records were found.</p>
</body>
</html>
The culprit is most likely this line:
The
do xyz or die()construct leads to funny behaviour in conjuction with thereturnstatement (i.e. the whole thing is interpreted as an OR expression and becausenew mysqliwill never be false, the “die” is never processed.). See a similar case here.Do this instead:
Also, slightly related, I think you will never catch a PDO connection error because this:
will always exit the function, and never reach the
catchblock. As with your actual problem, the solution is to pass the object to a$resultvariable first.