2013-01-18 30 views
0

我正在將PHP應用程序從Ubuntu服務器移動到AWS openSUSE實例。

該應用程序在openSUSE框上不起作用。 API對於任何具有$mysqli->insert_id的呼叫都會失敗。使用$mysqli的呼叫確實有效。

從閱讀我注意到,這通常會失敗,因爲auto_increment未在數據庫列上實現。我從Ubuntu託管的應用程序遷移了MySQL數據庫。表格模式似乎是相同的。

我也看過服務器配置文件php.ini等和MYSQLi擴展似乎配置正確。

正是因爲這個原因,我認爲這是一個PHP相關的問題。任何幫助將不勝感激。

編輯:按要求提供更多信息。

失敗的每個API調用的一般結構是。

  1. iOS的發送POST到API
  2. 的API(建於PHP)插入信息到其中有一個主鍵自動遞增一個表。
  3. API然後使用$ case_id = $ mysqli-> insert_id ;,獲取此主鍵的值。
  4. 該值返回到iOS應用程序。

重要 - $ CASE_ID被返回爲0

+1

您需要提供更多信息。什麼是您的查詢,您正在運行的查詢的表格模式是什麼。運行查詢的代碼是什麼,查詢運行後立即執行的代碼是什麼?我從來沒有聽說過'MySQLi :: $ insert_id'是一個問題,在php中。所以,直到進一步的信息 - 我的答案是PEBKAC。 –

+0

你可以更改數據庫訪問代碼嗎?如是!然後移植到'PDO'。見'http://in1.php.net/pdo'。其他API即將過時! –

+0

只是爲了排除它不是MySQL問題,它是一個PHP問題,你能提供更多關於如何從Ubuntu遷移數據庫的細節?您確定auto_increment設置已正確遷移嗎? – apokryfos

回答

0

要解決一個問題,這樣我會被隔離在發生問題開始。模式是否錯誤?如果使用MySQL shell登錄到MySQL服務器,並且您嘗試手動插入記錄,並且自動遞增(主鍵?)列的NULL值是否正確顯示新記錄?如果您使用從PHP/mysqli組件生成並傳遞到服務器的相同底層SQL語句進行查詢,它是否會返回正確的行?

如果它使用數據庫服務器上的MySQL shell,那麼如果你從API服務器嘗試相同的話會怎樣?它是權限/ ACL還是網絡問題?如果它在數據庫服務器和API(web?)服務器上的MySQL shell中工作,那麼它是否可以從您的PHP代碼中運行?也許你可以重構你的PHP以允許你從命令行運行測試/診斷(而不是試圖通過附加的web/UI層發起事務)。 (無論如何,編寫Web應用程序時通常都是一個好主意)。也許你可以將web/form/ReST處理(視圖)從傳遞數據的代碼中分離回數據庫(模型)。因此,您可以將控制器代碼與其他代碼隔離開來,並可以將其重新用於診斷和監視。

如果即使從數據庫服務器的唯一MySQL shell提示符中無法正常工作,那麼您可能在模式中遇到問題。返回工作的數據庫服務器並執行模式轉儲,如下所述:http://forums.mysql.com/read.php?35,128003,128105

然後恢復。它應該是一個完全空的數據庫,並且工作模式不變。如果這不起作用,那麼它表明你有一些問題甚至更低(MySQL版本和模塊,可能缺少一些存儲後端?)