我是php新手,遇到了一些我不知道如何解决的问题,我做了 应当更改数据库名称的HTML表单
<div class="form-group">
<form action="name.php" method="post">
<input type="text" class="form-control" name="name">
<input type="submit" value="Submit" name="submit">
</form>
</div>
HTML表单也已连接到PHP编辑脚本
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "tbl_product";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql ="UPDATE tbl_product SET name='$name' WHERE id = ID LIMIT 1";
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query
$stmt->execute();
// echo a message to say the UPDATE succeeded
echo $stmt->rowCount() . " records UPDATED successfully";
header("Refresh:0; url=products.php");
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
我运行的脚本不会更改数据库名称,如果更改,它将更改所有数据库名称。 目前,脚本运行正常,但什么也没发生。 我需要限制数据库中不断变化的数据,因此一次更改不会全部更改。
答案 0 :(得分:0)
您必须在where子句中设置id,然后它将只更新与id匹配的一行,而无需设置LIMIT 1。
$sql ="UPDATE tbl_product SET name='$name' WHERE id = $id";
您可以从表单中的隐藏输入中获取ID。
<div class="form-group">
<form action="name.php" method="post">
<input type="hidden" class="form-control" name="id" value="<?php echo $id; ?>">
<input type="text" class="form-control" name="name">
<input type="submit" value="Submit" name="submit">
</form>
</div>
答案 1 :(得分:0)
您的SQL查询似乎有问题。根据我在本地MySQL实例上运行的快速测试,条件WHERE id = ID
似乎总是正确的(它的评估结果可能类似于1=1
。因此,您的查询与{{1 }},因此它会更新所有没有LIMIT的记录。
此外,您没有适当地利用准备好的语句(这不是问题的一部分,但无论如何您都应该以正确的方式进行操作)。
UPDATE tbl_product SET name='$name' LIMIT 1
那样就不可能进行SQL注入,并且您可以在查询中正确使用id并可以删除LIMIT部分。
编辑1(重定向):
重定向和发送头是一个完全不同的主题。基本上,您会像这样进行操作(有关更多详细信息,另请参见this)
$id = 1; // assign the id of the record you want to change
$name = "the new name";
$sql ="UPDATE tbl_product SET name = :name WHERE id = :id";
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query and bind values to placeholders in the query
$stmt->execute([
':name' => $name,
':id' => $id
]);
此外,您不能在header('Location: products.php');
exit;
之前使用echo
。它将引发错误。有关更多信息,请参见here。
编辑2(更改随机记录):
更改随机记录似乎是一个奇怪的应用程序,但是使用以下查询可能会起作用:
header
由于您的查询中不再包含:id参数,因此您还需要从UPDATE tbl_product SET name = :name ORDER BY RAND() LIMIT 1
调用中删除:id
部分。