【问题标题】:Inserting into mysql database with php用php插入mysql数据库
【发布时间】:2013-07-06 23:22:07
【问题描述】:

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

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

这是我的“观点”(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);
    }
}
?>

【问题讨论】:

标签: php mysql sql database sql-insert


【解决方案1】:

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

$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();

【讨论】:

  • 我已经进行了更改,但仍然没有看到任何数据被插入到数据库中。这会表明我的桌子有问题吗? (我肯定成功连接到数据库)
  • 我要插入的表确实有一个附加列作为主键,它是一个自动递增的“id”。这可能是个问题吗?
  • 您不必在自动递增列中插入任何内容。此外,如果您仍在使用原始代码(我的第一个示例带有更新的引号),我注意到另一个问题 - 参数也需要引用。
【解决方案2】:

您应该首先打开 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));

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多