我想这是一个简单的问题,我根本无法找到原因或原因。 (希望这不是重复的)..
我的目的是从输入和textarea中获取信息,并将其插入到我的数据库中,进入已经存在“journals”的正确表中。然而,在点击提交并且没有收到任何错误之后,数据库中没有添加任何内容...想法?
这是我的“观点”(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>
这是我的“index”(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);
}
}
?>
答案 0 :(得分: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();
答案 1 :(得分: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));