- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我们近一周来一直在思考的问题。
发生了什么?
在我们的应用程序中,我们有一个电话号码字段,它与数据类型为 VARCHAR(25) 的数据库字段相关。我们不使用 INT,BIGINT。
在提交表单时,我们存储如下数据。
$_POST
使用 filter_input(INPUT_POST, 'mobile', FILTER_SANITIZE_STRING); 清理数据
使用 mysqli->prepare
将数据插入数据库,其中绑定(bind)参数也已正确设置。此字段设置为与“s”(字符串)映射。
然后将数据存储到数据库中。
现在我们在调试问题时将所有这些值记录在单独的日志文件中。最奇怪的是,这是在查看日志文件时发现的。似乎数据在通过 POST 发送时正确到达,在卫生后仍然很好,在插入数据库后立即检索时仍然很好。但是当我们的前端应用程序获取相同的值以显示给用户端时,获取的数据是 2147483647。
这种问题不会发生在所有此类插入中,它发生得非常随机,而且很少发生,但已经让我们到了一个地步,我正在竭尽全力寻找解决方案。
开发平台信息:PHP 5.3、MySQL 5.5.31
如有任何帮助,我们将不胜感激。
代码
代码如下:
$Mobile = filter_input(INPUT_POST, 'mobile', FILTER_SANITIZE_STRING);
$stmt = $mysqli->prepare("INSERT INTO enquiry(idAdminUsers, isConverted, Firstname, Lastname , Residence , WorkCollege , Gender , Age , Occupation , Mobile , Email , Transport , FirstMile , LastMile , Commute , NoPublicTransport , Member , YesMember , PurposeMember , NoMember , Note, Date, FirstMileCost, FirstMileTime, LastMileCost, LastMileTime, landlineNumber) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?,?,?,?)");
if ($stmt) {
if ($stmt->bind_param('iisssssissssssssisssssssss', $idAdminUsers, $isConverted, $firstName, $lastName, $Residence, $WorkCollege, $Gender, $Age, $Occupation, $Mobile, $Email, $Transport, $FirstMile, $LastMile, $Commute, $NoPublicTransport, $Member, $YesMember, $PurposeMember, $NoMember, $Note, $FirstMileCost, $FirstMileTime, $LastMileCost, $LastMileTime, $landlineNumber)) {
$stmt->execute()'
一旦插入,检索就会发生
$stmt = $mysqli->prepare("SELECT idEnquiry , idAdminUsers , isConverted , Firstname , Lastname , Residence , WorkCollege , Gender , Age , Occupation , Mobile , Email , Transport , FirstMile , LastMile , Commute , NoPublicTransport , Member , YesMember , PurposeMember , NoMember , Note, Date, FirstMileCost, FirstMileTime, LastMileCost, LastMileTime, landlineNumber FROM enquiry WHERE idEnquiry = ?");
if ($stmt) {
if ($stmt->bind_param('i', $idEnquirySelect)) {
if ($stmt->execute()) {
这正在被记录,并表明数据输入正确。但是,一旦我们非常随机地检查数据库,数据就会不正确。
以下是数据库建表脚本:
CREATE TABLE IF NOT EXISTS `enquiry` (
`idEnquiry` int(11) NOT NULL AUTO_INCREMENT,
`Firstname` varchar(255) DEFAULT NULL,
`Mobile` varchar(25) DEFAULT NULL,
`Email` varchar(45) DEFAULT NULL,
`Age` int(16) DEFAULT NULL,
`idAdminUsers` int(11) DEFAULT NULL,
`Member` tinyint(4) DEFAULT NULL,
`isConverted` tinyint(4) DEFAULT NULL,
`Note` text,
`Residence` varchar(255) DEFAULT NULL,
`WorkCollege` varchar(255) DEFAULT NULL,
`Transport` varchar(31) DEFAULT NULL,
`FirstMile` varchar(31) DEFAULT NULL,
`LastMIle` varchar(31) DEFAULT NULL,
`Gender` varchar(8) DEFAULT NULL,
`Commute` text,
`NoPublicTransport` varchar(64) DEFAULT NULL,
`YesMember` varchar(255) DEFAULT NULL,
`PurposeMember` varchar(128) DEFAULT NULL,
`NoMember` varchar(128) DEFAULT NULL,
`Occupation` varchar(64) DEFAULT NULL,
`Lastname` varchar(255) DEFAULT NULL,
`Date` date DEFAULT NULL,
`FirstMileCost` varchar(45) DEFAULT NULL,
`FirstMileTime` varchar(45) DEFAULT NULL,
`LastMileCost` varchar(45) DEFAULT NULL,
`LastMileTime` varchar(45) DEFAULT NULL,
`landlineNumber` varchar(15) NOT NULL,
PRIMARY KEY (`idEnquiry`),
UNIQUE KEY `idenquiry_UNIQUE` (`idEnquiry`),
UNIQUE KEY `Email_UNIQUE` (`Email`),
KEY `idAdminUserFK_idx` (`idAdminUsers`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='All the enquiry details are added to this table.' AUTO_INCREMENT=482 ;
最佳答案
这里有 2 条主要线索。
第一条线索:2147483647
我们对 2147483647 了解多少?
来自维基百科(http://en.wikipedia.org/wiki/2147483647):
The number 2,147,483,647 is also the maximum value for a 32-bit signed integer in computing. It is therefore the maximum value for variables declared as int in many programming languages running on popular computers.
我们怎样才能得到数据库创建的这个数字?
有几种方式,都和INT有关,但是由于你的“Mobile”字段数据类型是VARCHAR而不是INT,正如你明确强调的,我们知道问题不在数据库本身。如果字段是 INT,我们可以继续探索数据库本身以寻找可能的问题。所以我们排除了这种可能性。这给我们留下了可能的代码问题。
第二条线索:日志
this is getting logged, and shows that the data was correctly entered. But as soon as we go and check in the database very randomly data is incorrect.
每次在插入并记录后第一次运行选择查询时 - 它显示(在日志中)输入的数据是正确的,然后当你检查数据库时 - 有时它是正确的,有时它是2147483647.
(通常的)嫌疑人
根据此信息,可以安全地假设 PHP 在某处将字符串转换为整数,然后在正确插入后将此值放入/更新数据库中。
有几种很好的调试方法:
1) 搜索是否有另一个 UPDATE 查询
将数据输入到 Mobile 字段并覆盖已插入的正确数据。对您的所有文件进行完整代码搜索以查找术语“移动”可能是一个好的开始。
2) 在您的代码中搜索任何出现的 intval
,因为此函数(或其他类似函数/方法)可以将字符串转换为 2147483647:Converting a String to an Integer returns 2147483647
3) 在您的 MySQL 数据库中搜索任何其他出现的 2147483647,以确定这是否是一个孤立的问题,或者是否有其他任何东西获得该值并可能通过某种查询或其他方法将该值复制到 Mobile 字段。
希望这对您有所帮助。
关于php - 2147483647 即使数据类型为 VARCHAR 也被插入到 DB 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676058/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!