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 设备上运行,但不能在模拟器上运行