簡體   English   中英

用php插入mysql數據庫

[英]Inserting into mysql database with php

我想這是一個簡單的問題,我根本無法找出原因或原因。 (希望這不是重復的。)

我的目的是從輸入和文本區域中獲取信息,並將其插入數據庫中適當的表中,該表已經存在。 但是,在單擊提交並且沒有收到任何錯誤之后,沒有任何內容添加到數據庫中。

這是我的“視圖”(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);
    }
}
?>

當您使用單引號時,它不會擴展字符串中的變量。 另外,如果參數不是整數,則必須用引號引起來。 因此,查詢分配應如下所示:

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

首先,您應該打開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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM