【问题标题】:PHP SQlite Database FormPHP SQlite 数据库表单
【发布时间】:2012-08-22 21:38:24
【问题描述】:

我已经在 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);

表单正在输出表头以及我使用终端手动输入的记录,但它不会在其中插入记录???任何人都可以看到一个简单的错误吗?

迪斯科

【问题讨论】:

标签: php sqlite


【解决方案1】:

//插入记录
$db->e​​xec("INSERT INTO 反馈(姓名、电子邮件、cmets) VALUES ('&name', '&email','&cmets');");

一个明显的问题是您没有进行错误检查:

if (1!=$db->e​​xec("INSERT...)) { 打印“错误:”。内爆('/',$db->e​​rrorInfo()) 。 "
\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";
}

【讨论】:

  • 啊辉煌收到一个错误,说我正在尝试写入只读数据库:)
  • 好的,我已将数据库文件的权限更改为读/写,但现在我收到此错误:00000/14/无法打开数据库文件但在其下方仍显示我手动输入的记录
  • 它现在可以工作了。我必须将数据库移到一个目录上并授予该目录的读/写权限才能使 inster 查询正常工作
【解决方案2】:

检查以确保 PK 列 [feedbackid] 是在数据库中自动生成的 (AUTOINCREMENT)。

编辑:这不是绝对必要的,但缺少明确的 AUTOINCREMENT 可能会使中间件感到困惑。至少尝试将显式 AUTOINCREMENT 添加到另一个表进行测试不会有什么坏处。

【讨论】:

  • 是的。它是一个自动递增的列
  • 你能发布你的建表声明吗?
  • 将其添加到原始问题中
  • 当我使用终端手动插入时,我不明白为什么我需要这样做。当然这意味着它是自动递增的?
  • 我不使用 PHP 但经常使用 SQLite。你确定你应该用单引号包装变量吗? ('&name', '&email','&cmets');
猜你喜欢
  • 2015-05-20
  • 2017-08-06
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多