php插入数据到mysql数据库不报错,但没有插入成功。
数据表结构:DROPTABLEIFEXISTS`testers`;CREATETABLE`testers`(`Id`int(11)NOTNULLAUTO_INCREMEN...
数据表结构:
DROP TABLE IF EXISTS `testers`;
CREATE TABLE `testers` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(12) DEFAULT NULL,
`ip` varchar(30) DEFAULT NULL,
`department` enum('科技处','政治部','管理处') DEFAULT NULL,
`score` int(11) DEFAULT NULL,
`paperid` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COMMENT='考试人员成绩';
Php代码:
$conn = idbconn ( $db_server, $db_server_port, $db_user, $db_pass, $db_db );
//这是个mysqli对象的实例
$a=array("name".rand(0,99999),"28.33.112.".rand(1,255),1);
$sql="CALL addTester('".$a[0]."','".$a[1]."',".$a[2].",".$Score.",".$_SESSION[pid].");";
//插入数据的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `addTester`(in tname varchar(12),in nip varchar(30),in depart int, in nscore int,in pid int)
BEGIN
insert into testers values (Null,tname,nip,depart,nscore,pid);
END;
$sql.= "CALL showPaper(1,1)";
//查询数据的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `showPaper`(in pid int(11),in qtyp tinyint)
BEGIN
select * from questions where find_in_set(questions.id,(select ques from papers where papers.Id=pid) ) and types=qtyp;
END;
echo($sql);
//尝试使用直接插入的sql语句测试,此句在phpmyadmin和mysqlfront中可以正常插入数据。$sql="INSERT INTO `exam`.`testers` ( `name`, `ip`, `department`, `score`, `paperid`) VALUES ( '11a', '3333', '2', '333', '1')";
if ($conn->multi_query ( $sql )) {
do{
if ($result = $conn->store_result ()) {
while ( $row = $result->fetch_row () ) {
//printf("%s\n", $row[0]);
$a=$row[1];
……
}
$result->close ();
}
}while($conn->next_result());
}
最后发现查询语句执行成功,但插入语句始终没有将数据插入数据库,而sql语句应该是正确的,因为echo出来的语句在phpmyadmin和mysqlfront中可以正常插入。也试过用mysqli_query()单独执行插入功能,不论是存储过程还是insert语句,都无法插入,但是不报错,query都是返回成功值。实在是想不出原因了,请各位高手帮帮忙。
应该不是枚举的问题,枚举插入数字是对的,在mysqlfront和phpmyadmin中都是可以插入的,如果改为'政治部'之类的反而要报错。 展开
DROP TABLE IF EXISTS `testers`;
CREATE TABLE `testers` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(12) DEFAULT NULL,
`ip` varchar(30) DEFAULT NULL,
`department` enum('科技处','政治部','管理处') DEFAULT NULL,
`score` int(11) DEFAULT NULL,
`paperid` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COMMENT='考试人员成绩';
Php代码:
$conn = idbconn ( $db_server, $db_server_port, $db_user, $db_pass, $db_db );
//这是个mysqli对象的实例
$a=array("name".rand(0,99999),"28.33.112.".rand(1,255),1);
$sql="CALL addTester('".$a[0]."','".$a[1]."',".$a[2].",".$Score.",".$_SESSION[pid].");";
//插入数据的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `addTester`(in tname varchar(12),in nip varchar(30),in depart int, in nscore int,in pid int)
BEGIN
insert into testers values (Null,tname,nip,depart,nscore,pid);
END;
$sql.= "CALL showPaper(1,1)";
//查询数据的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `showPaper`(in pid int(11),in qtyp tinyint)
BEGIN
select * from questions where find_in_set(questions.id,(select ques from papers where papers.Id=pid) ) and types=qtyp;
END;
echo($sql);
//尝试使用直接插入的sql语句测试,此句在phpmyadmin和mysqlfront中可以正常插入数据。$sql="INSERT INTO `exam`.`testers` ( `name`, `ip`, `department`, `score`, `paperid`) VALUES ( '11a', '3333', '2', '333', '1')";
if ($conn->multi_query ( $sql )) {
do{
if ($result = $conn->store_result ()) {
while ( $row = $result->fetch_row () ) {
//printf("%s\n", $row[0]);
$a=$row[1];
……
}
$result->close ();
}
}while($conn->next_result());
}
最后发现查询语句执行成功,但插入语句始终没有将数据插入数据库,而sql语句应该是正确的,因为echo出来的语句在phpmyadmin和mysqlfront中可以正常插入。也试过用mysqli_query()单独执行插入功能,不论是存储过程还是insert语句,都无法插入,但是不报错,query都是返回成功值。实在是想不出原因了,请各位高手帮帮忙。
应该不是枚举的问题,枚举插入数字是对的,在mysqlfront和phpmyadmin中都是可以插入的,如果改为'政治部'之类的反而要报错。 展开
5个回答
展开全部
看到你的建表语句中要求department是玫举enum('科技处','政治部','管理处'),但你插入语句给的值是2,应该是这里的问题.玫举的意思是值限制在上述给定值范围中.
=========
应该mysql_query的时候会报错,只是你没有捕捉而已.
=========
应该mysql_query的时候会报错,只是你没有捕捉而已.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我能想到的原因:
1)同时打开的有点别的数据库资源;
2)php报错设置,用mysql_error()看看
3)文字编码
1)同时打开的有点别的数据库资源;
2)php报错设置,用mysql_error()看看
3)文字编码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
phpinfo看看服务器装mysqli插件没。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
解决了吗?我遇到了跟你一模一样一样的问题……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询