0

PHPアプリケーションをUbuntuサーバーからAWS openSUSEインスタンスに移動中です。

アプリケーションは openSUSE ボックスでは動作しません。が含まれるコールのAPIは失敗します$mysqli->insert_id$mysqlido workを使用した呼び出し。

auto_increment周りを読んで、データベース列に実装されていないため、これは通常失敗することに気付きました。ホストさMySQLれているアプリからデータベースを移行しました。Ubuntuテーブルスキーマは同じようです。

php.iniサーバー構成ファイルなども調べましたが、MYSQLi拡張機能は正しく構成されているようです。

このため、PHP関連の問題だと思います。どんな助けでも大歓迎です。

編集: 要求に応じて詳細情報を提供します。

失敗する各 API 呼び出しの一般的な構造は次のとおりです。

  1. iOS は POST を API に送信します
  2. API (PHP に組み込まれている) は、自動インクリメントする主キーを持つテーブルに情報を挿入します。
  3. 次に、API は $case_id = $mysqli->insert_id; を使用して、この主キーの値を取得します。
  4. この値は iOS アプリに返されます。

重要 - $case_id は 0 として返されます。

4

1 に答える 1

0

このような問題のトラブルシューティングを行うには、問題が発生している場所を特定することから始めます。スキーマが間違っていますか?MySQL シェルを使用して MySQL サーバーにログインし、レコードを手動で挿入しようとした場合、自動インクリメント (主キー?) カラムに NULL を指定すると、新しいレコードは正しく表示されますか? PHP/mysqli コンポーネントから生成されてサーバーに渡されるのと同じ基礎となる SQL ステートメントを使用してクエリを実行すると、適切な行が返されますか?

DB サーバーで MySQL シェルを使用して動作する場合、API サーバーから同じことを試してみるとどうなりますか? アクセス許可/ACL またはネットワークの問題ですか? DB サーバーと API (web?) サーバーの両方で MySQL シェルから動作する場合、PHP コードから動作しますか? おそらく、PHP をリファクタリングして、(追加の Web/UI レイヤーを介してトランザクションを開始しようとするのではなく) コマンド ラインからテスト/診断を実行できるようにすることができます。(これは一般的に、Web アプリケーションを作成する際には良い考えです)。おそらく、データを DB に戻すコード (モデル) から Web/フォーム/ReST 処理 (ビュー) を分離することができます。したがって、コントローラ コードを残りの部分から分離し、診断と監視に再利用できます。

DB サーバーの唯一の MySQL シェル プロンプトからでも動作しない場合は、スキーマに問題がある可能性があります。稼働中の DB サーバーに戻り、次の説明に従ってスキーマ ダンプを実行します: http://forums.mysql.com/read.php?35,128003,128105

次に、それを復元します。これで、作業中のスキーマが損なわれていない、完全に空のデータベースになります。それでもうまくいかない場合は、さらに低い問題があることを示唆しています (おそらく、MySQL のバージョンとモジュール、ストレージ バックエンドの欠落など)。

于 2013-01-20T15:56:12.120 に答える