[英]Attempting to insert new row into database using PDO
好的,所以我已經嘗試了好幾天了,並且我一直在閱讀各種教程,但是我似乎缺少了一些東西,因為我仍然無法獲得它。 我正在學習有關Web表單的信息,並將表單輸入插入相應的數據庫中。 我能夠從表單中獲取信息並在結果頁面上回顯它,因此我知道所有方法都可以。 但我似乎無法將表單輸入輸入到數據庫中。 我知道連接有效,所以我的語法一定有問題。
的PHP
//DB Configs
$username = null;
$password = null;
try {
$db = new PDO("mysql:host=localhost;dbname=Testing3", $username, $password);
//Set the PDO error mode to exception (what does this mean?)
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Prepare SQL and bind parameters
$sql = $db->prepare("INSERT INTO `NFK_SPECIES` (`Name`)
VALUES (:name)");
//Insert a Row
$species = $_POST['Species'];
$sql->execute(array(':name'=>$species));
}
catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
$result = $db->query('SELECT * from `NFK_Species` ORDER BY `Id` DESC');
//Query
/*
$input = $db->query("INSERT INTO `NFK_Species` (`Id`, `Name`) VALUES (Null, `$species`)");
$result = $db->query('SELECT * from `NFK_Species` ORDER BY `Id` DESC');*/
//Kill Connection
$db = Null;
}
HTML / PHP(網頁)
<h1>Inserting a New Species into Database:</h1>
<h3>Results</h3>
<?php
if ($sql->execute()){
echo "Data input was successful";
while ($rows = $result->fetch()){
echo $rows['Name']; echo ", ";
}
} else {
echo "Data input failed."; echo mysql_error();
}
?>
這只是我目前的嘗試。 我更喜歡之前用bindParam
和簡單的execute()
的嘗試,因此,如果可以代替它工作,我將不勝感激。 以下示例還具有此表的“ Id
列。 這是一個自動遞增的列,不需要閱讀,因此我在最近的嘗試中將其排除在外。 那是對的嗎?
過去的PHP
//Prepare SQL and bind parameters
$sql = $db->prepare("INSERT INTO `NFK_SPECIES` (`Id`, `Name`)
VALUES (Null, :name)");
$sql->bindParam(':name', $species);
//Insert a Row
$species = $_POST['Species'];
$sql->execute();
我一直在閱讀(或試圖閱讀)一堆教程,包括嘗試破譯php.net教程,但是它們似乎都是為那些已經對此有很好的處理能力和經驗的人寫的。我對所有這些都是新手。
好的,我能夠找出問題所在,然后使用我的代碼成功插入一行。
調試:
因此,上面發布的代碼破壞了我的代碼,這意味着我的頁面無法加載。 我認為這意味着某個地方存在語法錯誤,但是我找不到它,而且還沒有人找到它。 另外,這意味着我的Error Alerts
無法正常工作,讓我知道問題出在哪里。 如果您查看我的原始PHP示例,則會在最底部看到一個"}"
只是掛出並且沒有任何作用,但更重要的是,它破壞了代碼(愚蠢,高度敏感的php代碼) 。 所以我擺脫了這一點,然后我的錯誤消息開始起作用。 它說我無法連接到我的數據庫。 因此,我查看了數據庫登錄語法,該語法看起來不錯,然后您會在第一個php示例中注意到以某種方式設法將$username
和$password
為NULL
。 顯然,這是不正確的。 所以我解決了這個問題,下次刷新頁面時,我已經成功地在數據庫中輸入了一行! (好極了)
注意:
在我最初的php示例中,我包括了Id
列,該列自動遞增,用於行插入,其值為NULL
。 這行得通,並且插入了該行。 然后,我嘗試將其完全排除在外,但仍然有效。 因此,以下更新的工作代碼不包含“物種ID”。
工作代碼:
<body>
<h1>Inserting a New Species into Database:</h1>
<h3>Results</h3>
<?php
//DB Configs
$username = root;
$password = root;
try {
//Connect to Database
$db = new PDO("mysql:host=localhost;dbname=Testing3", $username, $password);
//Enable PDO Error Alerts
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Prepare SQL statement and bind parameters
$sql = $db->prepare("INSERT INTO `NFK_SPECIES` (`Name`) VALUES (:name)");
$sql->bindParam(':name', $species);
//Insert a Row
$species = $_POST['Species'];
$sql->execute();
// Echo Successful attempt
echo "<p class='works'><b>" . $species . "</b> successfully added to database.</p></br></br>";
}
catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// Gather updated table data
$result = $db->query('SELECT * from `NFK_Species` ORDER BY `Id` DESC');
//Kill Connection
$db = Null;
while ($rows=$result->fetch()){
echo $rows['Id']; echo " - "; echo $rows['Name']; echo "</br>";
}
?>
<body>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.