0

我正在将PHP应用程序从Ubuntu服务器移动到AWS openSUSE实例。

该应用程序无法在 openSUSE 机器上运行。API任何具有$mysqli->insert_id. 调用使用$mysqli做的工作。

通过阅读,我注意到这通常会失败,因为auto_increment没有在 Database 列上实现。MySQL我从Ubuntu托管应用程序迁移了数据库。表模式似乎是相同的。

我还查看了服务器配置文件php.ini等,并且MYSQLi扩展似乎配置正确。

正是出于这个原因,我认为这是一个与 PHP 相关的问题。任何帮助将不胜感激。

编辑:根据要求提供更多信息。

每个失败的 API 调用的一般结构是。

  1. iOS 向 API 发送 POST
  2. API(内置 PHP)将信息插入到具有自动递增主键的表中。
  3. 然后 API 使用 $case_id = $mysqli->insert_id;,获取这个主键的值。
  4. 此值将返回给 iOS 应用程序。

重要 - $case_id 返回为 0。

4

1 回答 1

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 版本和模块,缺少一些存储后端?)

于 2013-01-20T15:56:12.120 回答