【问题标题】:Call to a member function prepare() on a non-object Error PHP mysql [duplicate]在非对象错误PHP mysql上调用成员函数prepare()[重复]
【发布时间】:2014-10-02 09:39:06
【问题描述】:

您好,我一直在发现以前运行良好的代码存在问题 $conn 给出错误 这是一个在 PHP 中使用 pdo 的简单插入 我有一个连接类,通过在我的文件中执行以下操作可以正常工作

// query
try{


$sql="INSERT INTO vup_file(filename,path,category,sub_category,user_id,comment,language,duration)
VALUES (:filename,:path,:category,:subcategory,:user_id,:comment,:language,:duration)";
global $conn;
$query=$conn->prepare($sql);

$query->execute
(array(':filename'=>$filename,':path'=>$path,':category'=>$category,':subcategory'=>$subcategory,':user_id'=>$user_id,':comment'=>$comment,':language'=>$language,':duration'=>$duration));
echo 'Success';





}catch(PDOException $e)
{
echo 'ERROR OCCURED : '.$e->getMessage();
}
}

我在第 62 行收到一个对非对象调用成员函数 prepare() 的错误 我试图让$conn 但这不起作用 如何摆脱这个错误?

【问题讨论】:

  • 你定义了$conn吗?请也告诉我们那个地方
  • 我已经在这里和连接文件中定义了 $conn 并且连接代码工作正常!
  • 我也在使用另一个文件中的mysql_query,我在这个文件中使用它是不是因为它不起作用!

标签: php mysql pdo insert


【解决方案1】:

正如您所提到的,您在其他文件中使用 mysql_query() 并且它工作正常。

这意味着你使用了 mysql_connect()。

这意味着您使用过程样式连接到数据库并创建连接,但在这里您尝试使用 OOP 样式连接并使用 mysql_connect() 创建的连接。

这是不可能的。

您需要使用 OOP 样式连接到 DB:

$conn = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false));

或者使用过程样式而不是OOP样式来查询数据库:

mysql_query("INSERT INTO vup_file(filename,path,ca...

过去是过程风格,现在人们大多使用OOP风格,PDO对象。 PDO是未来,PDO是好的。

而且mysql_*()函数已经过去了,这样写新代码是不好的方式……嗯,这里解释得很好Why shouldn't I use mysql_* functions in PHP?

【讨论】:

    【解决方案2】:

    您的全局属性 $conn 尚未正确建立。

    我会回顾一下您的连接功能并确保您已成功建立数据库连接。

    【讨论】:

    • 我的连接代码工作正常!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2011-07-17
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多