我一直在努力通过PHP和sqlite现在一点,我只是困惑自己。
我有一个html表单,它可以访问一个名为processfeedback .php的php脚本。我的html代码是这样的:
<html>
<head>
</head>
<body>
<form action="processFeedback.php" method="POST">
<table>
<tr>
<td>Name:</td><td><input name="name"/></td>
</tr>
<tr>
<td>Email:</td><td><input name="email"/></td>
</tr>
<tr>
<td>Comments:</td><td><textarea name="comments"></textarea></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Submit"/></td>
</tr>
</table>
</form>
</body>
</html>
和我的PHP文件看起来像这样…
<?php
try
{
//open the database
$db = new PDO('sqlite:feedback.db');
$name = $_POST["name"];
$email = $_POST["email"];
$comments = $_POST["comments"];
//Insert record
$db->exec("INSERT INTO feedback (name, email,comments) VALUES ('&name', '&email','&comments');");
//now output the data to a simple html table...
print "<table border=1>";
print "<tr><td>Id</td><td>Name</td><td>Email</td><td>Comments</td></tr>";
$result = $db->query('SELECT * FROM feedback');
foreach($result as $row)
{
print "<tr><td>".$row['feedbackid']."</td>";
print "<td>".$row['name']."</td>";
print "<td>".$row['email']."</td>";
print "<td>".$row['comments']."</td>";
}
print "</table>";
$db = NULL;
}
catch(PDOException $e)
{
print 'Exception : ' .$e->getMessage();
}
?>
这是我的表创建方法…
CREATE TABLE feedback (feedbackid INTEGER PRIMARY KEY,name TEXT,email TEXT,comments TEXT);
表单输出表头,也是一个记录,我手动输入使用终端,但它不会插入记录??有人能看出一个容易犯的错误吗?
迪斯科
//
插入记录$db->exec("INSERT INTO feedback (name, email,comments))值(及名称,及电子邮件,和评论);");
一个明显的问题是你没有做错误检查:
if (1!=$db->exec("INSERT…")){打印"错误:"。内爆('/',$ db -> errorInfo())。"
' n";}
虽然我不太熟悉PDO,但我不知道占位符是如何映射到相应的PHP变量的——这可能是导致错误的原因:
$bound=array(
$_POST["name"], $_POST["email"], $_POST["comments"]
);
$stm=$db->prepare("INSERT INTO feedback (name, email,comments)
VALUES (?, ?,?));"
if (!$stm || !$stm->execute($bound)) {
print "Error: " . implode('/',$db->errorInfo()) . "<br />'n";
}
检查PK列[feedbackid]是否在数据库(AUTOINCREMENT)中自动生成
编辑:这不是绝对必要的,但是缺乏显式的AUTOINCREMENT可能会混淆中间件。至少,在另一个表中添加一个显式的AUTOINCREMENT也无妨。
我有一个类似的问题在PHP的形式,我使用PHP从sqlite数据库和自动填充字段获取数据。
你有$db->exec("INSERT INTO feedback (name, email,comments) VALUES(',名称',,电子邮件,和评论);");
我认为这应该是
$db->exec("INSERT INTO feedback (name, email,comments) VALUES (".美元的名字。",";. 美元的电子邮件。",";. 美元的评论。");");
句号"字符组合字符串。因为需要exec()基本上是一行字符串(sql语句),所以需要将编写的文本与变量组合为字符串。我不确定这是什么。在php中代替了变量名中的$,但我知道在一些函数中,变量前缀实际上是:而不是$,但是:变量必须是&;bound&;
查看php中'period'字符的作用
我绝不是专家,但我碰巧和你有同样的问题,所以我希望我能帮到你:)
编辑:我刚刚注意到这篇文章很老了。我希望这对将来使用新PHP的人有所帮助。