[英]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.