如何使用替换行中的现有数据?

时间:2013-07-26 02:31:56

标签: php mysql

我试图弄清楚如何更新特定数据库行中的数据而不是删除然后再次插入另一个查询。有谁知道我该怎么做呢?

main.php内容

<body>

<h1>Introduction Box</h1>
<form action="edit.php" method="post">
Title: <input type="text" name="introtitle">
Description: <textarea name="introdescription"></textarea>
<input type="submit">
</form>

</body>

edit.php内容(现在只添加表单中的条目)

<?php
// Connnection to MySQL
$connection = mysqli_connect("");

// Check Connection and Display If Error

if (mysqli_connect_errno($connection)) {
  echo "Failed to connect to MySQL: " . mysqli_conncet_error();
}

$introduction="INSERT INTO Introduction (Title, Description)
VALUES ('$_POST[introtitle]','$_POST[introdescription]')";

if (!mysqli_query($connection, $introduction) or die(mysql_error()))
  {
  die('Error: ' . mysqli_error($connection));
  }
echo "Record has been updated.";

mysqli_close($connection);

?>

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

html表单代码看起来像

<h1>Introduction Box</h1>
<form action="edit.php" method="post">
Title: <input type="text" name="introtitle">
Description: <textarea name="introdescription"></textarea>
<input type="hidden" name="id" value="<?php echo $current_edit_id;?>">
<input type="submit">
</form>

</body>

php脚本代码看起来像

<?php
// Connnection to MySQL
$connection = mysqli_connect("");

$current_edit_id = $_POST['current_edit_id'];

// Check Connection and Display If Error

if (mysqli_connect_errno($connection)) {
  echo "Failed to connect to MySQL: " . mysqli_conncet_error();
}

$introduction="UPDATE Introduction SET Title='value', Description='value' WHERE ID='$current_edit_id'";

if (!mysqli_query($connection, $introduction) or die(mysql_error()))
  {
  die('Error: ' . mysqli_error($connection));
  }
echo "Record has been updated.";

mysqli_close($connection);

?>

希望这对您有所帮助。

答案 1 :(得分:1)

在“编辑”表单中,您需要一个带ID的隐藏字段。 “标题”是ID,还是有单独的ID列?

在SQL中,根据ID或TITLE是否为您的密钥,您需要:

update INTRODUCTION set TITLE=?, DESCRIPTION=? where ID=?
update INTRODUCTION set TITLE=?, DESCRIPTION=? where TITLE=?  -- set new title, WHERE previous title

如果您坚持使用未准备好的语句(易受SQL注入攻击),请确保过滤或清理进入SQL语句的值。请参阅:What are the best PHP input sanitizing functions?

UPDATE Introduction SET Title='value', Description='value' WHERE ID=id

从Web到SQL的未经过滤的值允许攻击者轻而易举地破解或破坏您的数据库。

答案 2 :(得分:1)

有两个选项,您可以使用“DUPLICATE KEY UPDATE”子句,只需在记录已经存在时获取您想要更新的内容

INSERT INTO `table`
    (`col1`,`col2`)
SELECT * FROM table
ON DUPLICATE KEY UPDATE col1 = 'value';

第二个选项是使用REPLACE。对于这个,只需交换INSERT for REPLACE,它应该可以正常工作:

REPLACE INTO Introduction (Title, Description)
VALUES ('$_POST[introtitle]','$_POST[introdescription]')

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

http://dev.mysql.com/doc/refman/5.0/en/replace.html

答案 3 :(得分:0)

查询语法为mysql_query("UPDATE tablename SET column='value' WHERE CONDITION")