尝试通过表单插入数据库时​​出错。 SQLSTATE [42S22]

时间:2016-06-07 18:58:11

标签: php html mysql forms pdo

尝试从表单中获取数据并将其添加到名为test的数据库中的对象表时,我遇到了一个小问题。

当我打开表单时,添加一些信息并按提交,我收到此错误:

  

致命错误:    未捕获的PDOException:SQLSTATE [42S22]:找不到列:1054未知    专栏'先生'在'字段列表'在*路径**

HTML和PHP代码位于同一目录下的两个单独文件中。

page_1.php

sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/it/java')
            output.classesDir   = "$buildDir/classes/it"
        }

        def resourceDir = file('src/it/resources')
        if (resourceDir.exists()) {
            resources.srcDir resourceDir
            output.resourcesDir = "$buildDir/resources/it"
        }
    }
}

connect.php

<form action="connect.php" method="post">
    Title: <input type="text" name="title"><br />
    First name: <input type="text" name="fname"><br />
    About: <textarea name="about"></textarea><br />
    <input type="reset" name="reset">
    <input type="submit" name="submit" value="OK">
</form>

1 个答案:

答案 0 :(得分:1)

你有4个错误。

  • 列数与值数(4列,3个值)不匹配
  • 您正在插入未加引号的字符串值 - 这不起作用
  • 您没有使用预先准备好的陈述但是您正在使用PDO,因此没有任何理由
  • 您正在发布INSERT个问题,并且您正在尝试将其视为SELECT个查询。这根本没有意义。

使用预准备语句的代码,并生成对SQL注入安全的工作查询,如下所示:

$stmt = $pdo->prepare("INSERT INTO objects (post_title, post_content, post_name, post_date) VALUES (?, ?, ?, NOW())");

$stmt->execute(array($_POST['title'], $_POST['about'], $_POST['fname']));

如果您需要插入记录,则发出另一个选择新创建记录的查询,也使用预准备语句。

$stmt = $pdo->prepare("INSERT INTO objects (post_title, post_content, post_name, post_date) VALUES (?, ?, ?, NOW())");

$stmt->execute(array($_POST['title'], $_POST['about'], $_POST['fname']));

$id = $pdo->lastInsertId();

$stmt = $pdo->prepare("SELECT * FROM objects WHERE id = ?");

$stmt->execute(array($id));

// Now the record is in an array, no need to while loop over it.
$record = $stmt->fetchAll(PDO::FETCH_ASSOC);