在服务器移动后对非对象调用成员函数prepare()


Call to a member function prepare() on a non-object after server move

我被难住了,我更换了主机,现在我在一个在旧服务器上工作了几个月的脚本上得到了"对非对象的成员函数prepare()的调用"。我在这里读过书,也尝试过一些我发现的东西,但似乎没有什么能让它再次发挥作用。

我是新手,所以请说得慢一点,说得清楚一点。)

$dbh = connect_db(); 
    $sql = 'SELECT count(*) FROM ppipn WHERE txn_id = :txn_id';
    $result = $dbh->prepare($sql); 
    $result->execute(array(':txn_id' => $txn_id)); 
    $number_of_rows = $result->fetchColumn(); 
    if ($number_of_rows>0){
    die();
    }

功能:

function connect_db()
{
    $DbHost = 'localhost';
    $DbName = '***n';
    $DbUser = '***';
    $DbPass = '***';
    $table;
    try
    {
        $connection = new PDO('mysql:host='.$DbHost.';dbname='.$DbName, $DbUser, $DbPass);
        $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $connection->setAttribute(PDO::ATTR_PERSISTENT, true);
    }
    catch (PDOException $e)
    {
        // Proccess error
        echo 'Cannot connect to database: ' . $e->getMessage();
    }
    return $connection;
}

此错误表示$dbh->prepare()行中的$dbh不是对象。

connect_db()函数可以返回一个已构建的PDO对象,也可以回显"Cannot connect"并返回一个名为$connection的变量,该变量为空。

您的connect_db()函数几乎肯定无法连接,并且您没有看到错误回显。

"这可能是register_globals问题吗????虽然我现在倾向于服务器问题。如果有人知道服务器问题可能是什么,我很乐意听到。主机是Bluehost。"–user3154948

根据Bluehost的文档https://my.bluehost.com/cgi/help/89
Host name = (use the server IP address),而您目前正在使用localhost

您以前的主机的DB设置可能要求您使用localhost,但Bluehost的设置似乎并非如此。从服务器更改为服务器/托管服务是正常的。


以下内容摘自他们的网站:https://my.bluehost.com/cgi/help/89

配置设置:使用以下配置设置连接到数据库主机名=(使用服务器IP地址)数据库名称=(cpanelUsername_databaseName)数据库用户名=(cpanelUsername_databaseUsername)数据库密码=(您为该数据库用户输入的密码)MySQL连接端口=3306TCP或UDP都可以。

因此,将localhost更改为他们为您分配的IP地址。查看您的电子邮件以了解注册时发送给您的任何详细信息,或者联系Bluehost以了解您应该使用的IP地址设置。

$DbHost = 'localhost'; // change this

另请参阅:https://my.bluehost.com/cgi/help/2167