SQL 查询可在测试服务器上运行,但不能在现场运行......可能有啥区别?

Posted

技术标签:

【中文标题】SQL 查询可在测试服务器上运行,但不能在现场运行......可能有啥区别?【英文标题】:SQL query works on testing server but not live... what could be the difference?SQL 查询可在测试服务器上运行,但不能在现场运行......可能有什么区别? 【发布时间】:2009-05-21 17:27:30 【问题描述】:

已解决: 我在本地服务器上编写并测试了一个 php 脚本。 (没什么花哨的,只是在同一个数据库中连续两次插入 SQL,但不同的表)。

两台服务器都运行 PHP5 和 mysql 5。

在本地服务器上,两个查询都得到了正确处理。

在实时服务器上,只有第一个查询有效,而第二个查询无效,我不知道为什么。

代码如下:

    $sql_login = "INSERT INTO logintbl 
              (...) 
           VALUES (...)";
   $result_login = mysqli_query($this->connect, $sql_login);

   # Fill contact details
   $sql_contactD = "INSERT INTO contactDetails
                    (...)
         VALUES (...)";
   $result_contactD = mysqli_query($this->connect, $sql_contactD);

在我的本地服务器上,两个查询都返回 true,并且数据被添加到数据库中。

在我的实时服务器上,第一个查询按预期工作,但第二个查询失败,没有任何错误消息。

当然,两台服务器上的表结构是相同的。两个表都在同一个数据库中,并且用户对数据库有足够的权限。

有什么可能是错误的线索吗?


编辑 1:权限:是的,用户对两个表都有足够的权限。


编辑 2:我感觉很傻,但是按照 James 关于检查 mysqli_error() 的建议,我发现生产服务器在表名方面是区分大小写的,这与我的测试服务器不同,并且它转换了原始服务器我的表名 (contactDetails) 改为小写 (contactdetails)。

感谢大家的帮助。

【问题讨论】:

你检查过你的mysql日志是否有错误信息? 还可以在运行不起作用的查询后尝试“显示警告”。这将返回有关警告的信息,这些信息不如错误严重,并且除非您查询,否则不会显示消息。 也检查 mysqli_error() 的输出。测试和生产服务器是否有不同的魔术引号设置?其他设置? 请(!),如果您的问题得到解决,请将任何答案标记为“正确答案”。 ;) 【参考方案1】:

您是否检查过生产环境中的权限?意思是您是否已验证您对contactDetails 具有插入访问权限?

【讨论】:

是的,对不起,我应该指定的,但是,是的,权限足够了。【参考方案2】:

您是否尝试将 $sql_contactD 打印到屏幕(或网页),然后在 MySQL 查询浏览器中运行完全相同的查询?

【讨论】:

【参考方案3】:

回答我自己的问题,因为它看起来是正确关闭它的唯一方法:

我觉得很傻,但是跟着 詹姆斯的检查建议 mysqli_error(),我发现 生产服务器区分大小写 关于表名,不像我的 测试服务器,并且它转换了 我的表的原始名称 (联系方式)转小写 (联系方式)。

【讨论】:

以上是关于SQL 查询可在测试服务器上运行,但不能在现场运行......可能有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

请! Kivy 应用 Buildozer 可在 Windows 上运行,但不能在 Android 上运行

iOS 应用程序可在 iPhone 上运行,但不能在 iPad 上运行

Cordova phonertc 演示可在 android 上运行,但不能在浏览器上运行

Android Studio Google Maps 可在 Android 设备上运行,但不能在模拟器上运行

OSX Java App Bundle 可在 HFS+ 上运行,但不能在 APFS 上运行

Android Studio 应用程序可在模拟器中运行,但不能在真实设备上运行