php + mysql 插入错误
Posted
技术标签:
【中文标题】php + mysql 插入错误【英文标题】:php + mysql insert error 【发布时间】:2013-03-01 15:47:17 【问题描述】:我正在创建一个简单的表单评论,允许用户使用 php mysql jquery 发送评论并插入到数据库中,以便在页面中不刷新一切正常,但问题是: 当我写的时候我评论mysql数据库需要4行并在其中填写相同的数据有人可以帮助我解决错误吗??
my_db.sql
--
-- Database: `my_db`
--
-- --------------------------------------------------------
--
-- Table structure for table `comments`
--
CREATE TABLE IF NOT EXISTS `comments` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`email` varchar(70) NOT NULL,
`comments` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `comments`
--
INSERT INTO `comments` (`id`, `name`, `email`, `comments`) VALUES
(1, 'test', 'test@test.com', 'testcomments'),
(2, 'test', 'test@test.com', 'testcomments'),
(3, 'test', 'test@test.com', 'testcomments'),
(4, 'test', 'test@test.com', 'testcomments');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
index.php //jquery的形式和功能所在
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>feedback page</title>
<script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link rel ="stylesheet" href = "css/default.css" />
<script type = "text/javascript">
$(function()
$('#submit').click(function()
$('#container').append('<img src = "img/loading.gif" id = "loading" />');
var name = $('#name').val();
var email = $('#email').val();
var comments = $('#comments').val();
$.ajax(
url: 'submit_to_db.php',
type: 'POST',
data: 'name =' + name + '&email=' + email + '&comments=' + comments,
success: function(result)
$('#response').remove();
$('#container').append('<p id = "response">' + result + '</p>');
$('#loading').fadeOut(500, function()
$(this).remove();
);
);
return false;
);
);
</script>
</head>
<body>
<form action = "submit_to_db.php" method = "post">
<div id = "container">
<label for = "name">Name</label>
<input type = "text" name = "name" id = "name" />
<label for = "email">Email address</label>
<input type = "text" name = "email" id = "email" />
<label for = "comments">Comments</label>
<textarea rows = "5"cols = "35" name = "comments" id = "comments"></textarea>
<br />
<input type = "submit" name = "submit" id = "submit" value = "send feedBack" />
</div>
</form>
</div>
</body>
</html>
submit_to_db.php
<?php
$conn = new mysqli('localhost', 'root', 'root', 'my_db');
$query = "INSERT into comments(name, email, comments) VALUES(?, ?, ?)";
$stmt = $conn->stmt_init();
if($stmt->prepare($query))
$stmt->bind_param('sss', $_POST['name'], $_POST['email'], $_POST['comments']);
$stmt->execute();
if($stmt)
echo "thank you .we will be in touch soon";
else
echo "there was an error. try again later.";
?>
【问题讨论】:
请重新格式化您的问题,使其不在标题中。我不确定你在问什么。 您是否安装了 Firebug 或其他任何东西?如果是这样,您可以查看它是只提交一次还是由于某种原因 ajax 提交了 4 次。 问题是,如果您查看 my_db.sql,您会发现 4 行填充了相同的数据,但实际上这必须填充 1 行而不是 4 行,您了解我的问题吗?我不知道如何以一种好的方式提出问题希望能帮助并谢谢你 my_db.sql 是当前数据库的转储还是您用于创建表的 sql? @Pitchinnate 是的,我有 firebug,当我转到 phpmyAdmin 时,它会显示此错误 CSP WARN: allow 指令已弃用,请改用等效的 default-source 指令 【参考方案1】:我实际上把你的脚本,加载到我的服务器上,创建了数据库表,并测试了脚本。
每次提交只插入一行。
您的脚本运行正常。
但是,您的测试过程存在缺陷。
我还检查了 Firebug 控制台,AJAX 调用按预期工作。
除非您有其他诊断,否则我想我无法为您提供更多帮助。
错误警报 您的代码中存在一个错误,这将使您在未来几年的生活中陷入巨大的悲痛......
if($stmt)
echo "thank you .we will be in touch soon";
else
echo "there was an error. try again later.";
这个if
语句将始终评估为真,因为查询已执行(当然,除非 MySQL 没有运行)。
您的意图是查看插入是否成功,为此,您需要检查:
if($stmt->affected_rows)...
$stmt->affected_rows
将在失败时返回 -1 或在成功时返回 +1。
调试策略 (1)在您的时间戳中添加一个额外的字段,以便您可以看到插入记录的时间。这将使您更深入地了解正在发生的事情。
(2) 清空您的表并再次尝试您的代码。您可能认为您获得了多次插入,但也可能是您点击了 4 次提交按钮。
【讨论】:
以上是关于php + mysql 插入错误的主要内容,如果未能解决你的问题,请参考以下文章