【发布时间】:2014-05-15 10:47:35
【问题描述】:
这是我们近一周来一直在努力解决的问题。
发生了什么?
在我们的应用程序中,我们有一个电话号码字段,它与数据类型为 VARCHAR(25) 的数据库字段相关。我们不使用 INT、BIGINT。
-
在提交表单时,我们将数据存储如下。
$_POST使用
filter_input(INPUT_POST, 'mobile', FILTER_SANITIZE_STRING);清理数据使用
mysqli->prepare将数据插入数据库,其中绑定参数也已正确设置。该字段设置为使用“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 ;
【问题讨论】:
-
您的数据库中是否显示正确的数据?你能告诉我们有问题的前端应用程序的代码吗?
-
您能否确认数据库中存储的值确实是2147483647(直接查询数据库,而不是通过您的前端应用程序?)
-
什么数据变成了2147483647?
-
你希望这个值如何输出?
-
@parthk 我在您的代码中看到您如何检索插入的数据。但是您没有向我们展示您如何回应您所说的看起来正确的值。请显示该代码。另外,如果你说它看起来正确,那么这意味着数据在数据库中是正确的......并且请向我们展示显示错误数据的代码......你如何得到它以及你如何回应它? ...我们需要排除您是否回显错误,或者正确的数据稍后是否被另一个查询覆盖。