0

我想这是一个简单的问题,我根本不知道在哪里或为什么。(希望这不是重复的)..

我的意图是从输入和文本区域中获取信息,并将其插入我的数据库到已经存在“期刊”的正确表中。然而,在点击提交并且没有收到任何错误之后,数据库中没有添加任何内容......想法?

这是我的“观点”(post.php):

<fieldset>
    <form method="post" action="push.php">
        <input type="text" name="datetitle" /><br />
        <textarea name="journalcontent"></textarea><br />
        <input type="submit" />
    </form>
    <?php echo $datetitle ?>
    <p><?php $output ?></p>
</fieldset>

这是我的“索引”(push.php),省略了明显的部分:

<?php

$dsn = '*';
$username = '*';
$password = '*';

include "model.php";

try {
    $db = new PDO($dsn, $username, $password);
} catch (PDOException $exc) {

    echo 'connection failed';
    exit;
}

echo 'goodzo';

$datetitle = $_POST['datetitle'];
$journalcontent = $_POST['journalcontent'];

if (!empty($datetitle)) {
    $output = add_entry($datetitle, $journalcontent);
} else {
    $output = "empty";
}

include "post.php";

?>

最后是我的model.php:

<?php
function add_entry($datetitle, $journalcontent) {
    global $db;
    $query = 'INSERT INTO journals
                (entry_date, contents)
              VALUES
                 ($datetitle, $journalcontent)';
    try {
        $statement = $db->prepare($query);
        $statement->execute();
        $statement->closeCursor();
    } catch (PDOException $e) {
        $error_message = $e->getMessage();
        display_db_error($error_message);
    }
}
?>
4

2 回答 2

5

当您使用单引号时,它不会扩展字符串中的变量。此外,如果您的参数不是整数,则需要用引号引起来。所以查询分配应该是这样的:

$query = "INSERT INTO journals
            (entry_date, contents)
          VALUES
             ('$datetitle', '$journalcontent')";

也就是说,您确实应该使用绑定参数将值传递给查询。像这样的东西:

$query = 'INSERT INTO journals
            (entry_date, contents)
          VALUES
             (?, ?)';

$statement = $db->prepare($query);
$statement->bindParam(0, $datetitle, PDO::PARAM_STR);
$statement->bindParam(1, $journalcontent, PDO::PARAM_STR);
$statement->execute();
于 2013-07-06T23:25:25.037 回答
0

您应该首先打开 PDO 的错误报告;我会用

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

除非$datetitle$journalcontent都是整数,否则查询将由于 SQL 语法错误和缺少字符串引用而失败。您应该参数化查询以避免此问题以及可能的注入。

$query = <<<SQL
    INSERT INTO journals
        (entry_date, contents)
    VALUES
        (?, ?)
SQL;
$statement = $db->prepare($query);
$statement->execute(array($datetitle, $journalcontent));
于 2013-07-06T23:28:39.303 回答