問題描述
致命錯誤:在線調(diào)用非對象上的成員函數(shù) query():$result = $conn->query($sql) 或 die(mysqli_error());
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>
推薦答案
罪魁禍?zhǔn)缀芸赡苁沁@一行:
The culprit is most likely this line:
return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database');
do xyz or die()
構(gòu)造與 return
語句結(jié)合會導(dǎo)致有趣的行為(即整個事情被解釋為 OR 表達(dá)式,因?yàn)?new mysqli
永遠(yuǎn)不會為假,永遠(yuǎn)不會處理死".).在此處查看類似案例.
The do xyz or die()
construct leads to funny behaviour in conjuction with the return
statement (i.e. the whole thing is interpreted as an OR expression and because new mysqli
will never be false, the "die" is never processed.). See a similar case here.
改為這樣做:
$result = new mysqli($host, $user, $pwd, $db) ;
if (!$result) die (....);
return $result;
另外,有點(diǎn)相關(guān),我認(rèn)為你永遠(yuǎn)不會發(fā)現(xiàn) PDO 連接錯誤,因?yàn)?
Also, slightly related, I think you will never catch a PDO connection error because this:
return new PDO("mysql:host=$host;dbname=$db", $user, $pwd);
將總是退出函數(shù),永遠(yuǎn)不會到達(dá)catch
塊.與您的實(shí)際問題一樣,解決方案是首先將對象傳遞給 $result
變量.
will always exit the function, and never reach the catch
block. As with your actual problem, the solution is to pass the object to a $result
variable first.
這篇關(guān)于致命錯誤:在非對象上調(diào)用成員函數(shù) query()的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!