致命错误:在第 7 行调用非对象上的成员函数 prepare()。我想不通,为啥会出现此错误?

Posted

技术标签:

【中文标题】致命错误:在第 7 行调用非对象上的成员函数 prepare()。我想不通,为啥会出现此错误?【英文标题】:Fatal error: Call to a member function prepare() on a non-object on line 7. I can't figure this out, why do I get this error?致命错误:在第 7 行调用非对象上的成员函数 prepare()。我想不通,为什么会出现此错误? 【发布时间】:2012-12-15 06:13:03 【问题描述】:

连接成功 致命错误:在第 7 行对非对象调用成员函数 prepare()。为什么会出现此错误?这是论坛的开始。我用'if ($query = $db->prepare($sql))'来准备。

<?php
session_start();
$db = mysql_connect("localhost","root","","my_db") or die ("Could not connect to         database.");
echo 'Connected Successfully';

$sql = "SELECT forum_id, forum_name FROM forum_tbl";
if ($query = $db->prepare($sql))
    $query->bind_result($f_id, $f_name);
    $query->execute();
    $query->store_result();
else
    echo $db->error;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>
<title>Forum</title>
<meta/>
<style type="text/css">
</style>
</head>

<body>
<div class="container">
<div class="content">
    <table align="center" >
        <?php
        if($query->num_rows !==0):
        while($row = $query->fetch()):?>
        <tr>
        <td><a href="forum.php?id=<?php echo $f_id?>"><?php echo $f_name;?>    </a></td>
        </tr>
        <?php endwhile; endif;?>    
    </table>
</div>
</div>
</body>
</html>

【问题讨论】:

错误告诉你。您试图在不是对象的东西上调用方法。 mysql_connect() 返回一个资源标识符,而不是一个对象。 mysql_connect$db-&gt;prepare() 你在开玩笑吗? mysql-extension 已过时,不再维护(现在有一段时间了......),它将在 5.5 中标记为已弃用。请改用PDO_MySQLMySQLi。 php.net/en/mysql-connect 【参考方案1】:

变化:

$db = mysql_connect("localhost","root","","my_db") or die ("Could not connect to database.");

try 
    $db = new PDO(mysql:dbname=my_db;host=127.0.0.1, "root","");
 catch (PDOException $e) 
    echo 'Connection failed: ' . $e->getMessage();
    exit();

【讨论】:

【参考方案2】:

您将 mysql_connect 与 PDO 混淆了。使用 PDO,您将获得一个用于查询的对象,而不是 mysql_connect 无论如何都已弃用!

所以你正在调用一个不是对象的方法。假设您有这样的常量(否则只需替换为正确的值)将您的代码更改为

$db = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);

【讨论】:

以上是关于致命错误:在第 7 行调用非对象上的成员函数 prepare()。我想不通,为啥会出现此错误?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 致命错误:在第 45 行的 admin\includes\html\database.class.php 中的非对象上调用成员函数 prepare()

致命错误:对 SQL SERVER 2012 的非对象 XAMPP 上的成员函数 query() 调用

致命错误:在非对象上调用成员函数 fetch()?

致命错误:调用非对象代码点火器 $query->num_rows()==1) 上的成员函数 where() [重复]

致命错误:调用字符串上的成员函数 prepare()

致命错误:在非对象上调用成员函数 getLoginUrl()