2013-07-06 219 views
0

我想這是一個簡單的問題,我根本無法找出爲什麼。 (希望這不是重複的)..插入到MySQL數據庫和PHP

我的意圖是從輸入和textarea中獲取信息,並將其插入到我的數據庫中已存在的「日誌」的適當表中。然而,在點擊提交併且沒有收到任何錯誤之後,沒有任何東西添加到數據庫中......思考?

這裏是我的 「視圖」(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"; 

?> 

,最後我的模型.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

does not the model.php include have have to after the PDO connection?否則$ db指什麼都沒有.... – KyleK

+0

@KyleK不,因爲它只在函數被調用時被引用。 * PHP * – 19greg96

+0

[你真的應該修復您的應用程序討厭的SQL注入漏洞。(http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php) – PeeHaa

回答

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(); 
+0

我已經做出了改變,但仍然沒有看到任何數據被插入到數據庫中。這會暗示我的桌子有問題嗎? (我已經成功連接到數據庫) – captainrad

+0

我插入的表中確實有一個額外的列是主鍵,它是一個自動遞增的'id'。這可能是一個問題嗎? – captainrad

+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));