2014-10-02 51 views
0

我很難過,我改變了主機,現在我正在調用腳本上的「調用非成員函數prepare()成員函數」已經在舊服務器上工作了數月。我在這裏讀了幾遍,嘗試了幾個我發現的東西,但似乎沒有什麼能讓它再次起作用。調用成員函數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; 
} 
+0

你有沒有其實導出DB數據,然後輸入回在到新的服務器?我很難過。 – 2014-10-02 20:25:21

+0

您的connect_db函數會捕獲連接錯誤,但它會繼續返回$ connection。你能分辨出是否拋出了PDOException嗎? – 2014-10-02 20:25:27

+0

只爲咯咯地笑,因爲我很困惑爲什麼這不起作用,也沒有拋出異常,你可以在try塊上面聲明'$ connection = null;'並且看看它是否做了什麼。我幾乎肯定'try/catch'不會限制範圍,但值得一試。 – Crackertastic 2014-10-02 20:53:22

回答

4

此錯誤意味着,在線路$ dbh- $胸徑>製備()不是一個對象。

您的connect_db()函數可以返回一個內置的PDO對象,或者echo「無法連接」並返回一個名爲$ connection的變量,該變量是空的。

您的connect_db()函數幾乎肯定無法連接,並且您沒有看到錯誤echo'd out。

+0

我一開始也在想,但是OP聲明:*「我更改了主機,現在我正在獲取」在非對象上調用成員函數prepare()「,這個腳本已經在舊服務器「。* - 所以,這是我沒有得到的。 – 2014-10-02 20:29:24

+0

我在想新主機沒有連接到數據庫的權限,就像防火牆模塊或其他東西一樣。 – STLMikey 2014-10-02 20:32:23

+0

你可能是對的。如果OP發佈了完整的代碼,那麼另一個因素是'$ txn_id',我沒有看到它在任何地方被定義。它可能是所說的一切的混合物。 – 2014-10-02 20:34:01

3

「這可能是一個問題了register_globals ??????雖然我在這一點上傾向於服務器問題我自己。如果任何人有任何想法的服務器問題可能是什麼,我很想聽到它主機是Bluehost。「 - user3154948

按Bluehost的文檔https://my.bluehost.com/cgi/help/89
Host name = (use the server IP address)和你使用目前localhost

您以前的主持人的數據庫設置可能需要您使用localhost,但Bluehost的設置似乎並不是這種情況。這從服務器到服務器/託管服務的變化是正常的。


下已採取從他們的網站:https://my.bluehost.com/cgi/help/89

 
Configuration Settings: 

Use the following configuration settings for connecting to your database 

Host name = (use the server IP address) 
Database name = (cpanelUsername_databaseName) 
Database username = (cpanelUsername_databaseUsername) 
Database password = (the password you entered for that database user) 
MySQL Connection Port = 3306 
TCP or UDP, either is fine. 

因此,改變localhost給他們分配給你的IP地址。查看您的電子郵件,瞭解註冊時發送給您的任何詳細信息,或contact Bluehost,以瞭解您應該使用的IP地址設置。

$DbHost = 'localhost'; // change this 

參見:https://my.bluehost.com/cgi/help/2167

+0

每個技術支持本地主機是正確的,我從來不會發現,如果這是問題,但事實並非如此。但它是固定的!我?'d如果pwd正確,所以創建了一個新用戶,舊密碼不正確,並且由於服務器錯誤,新用戶從未與此數據庫關聯,因此無法連接,導致BOTH實例中出現非對象錯誤,一個是我的錯,另一個是服務器的錯誤......但是他們看起來和肉眼完全一樣,升級後花了20分鐘,但他想通了,所以道具Bluehosts升級部和所有試圖幫助的人! – user3154948 2014-10-03 01:12:58

+0

@ user3154948這是個好消息,感謝您的更新。我很高興它爲你解決。 *乾杯* - 我只是想知道他們爲什麼把他們的網站上的信息,作爲一個IP地址。好吧,好消息是,它已經解決了。 – 2014-10-03 01:13:52

+0

我不能肯定地說,但是當我跟他們談論避免停機時間做服務器傳輸時,他們提到了同樣的事情。 *聳聳肩*,但它作爲本地主機(最後),我專門問及它,他們說本地主機是好的,所以我離開這個該死的東西獨自一人...... LOL – user3154948 2014-10-03 01:21:04

相關問題