更新 MYSQL 记录错误

Posted

技术标签:

【中文标题】更新 MYSQL 记录错误【英文标题】:UPDATING MYSQL record error 【发布时间】:2015-04-10 07:55:02 【问题描述】:

我正在编写一个脚本来更新记录。在我看来,脚本很好,我也收到了成功消息,但数据库中的记录没有更新。请帮我解决这个问题。

这是我的表单页面。

<!-- Inquiry Table Stars here -->

<?php
$id=$_GET['id'];
$sql = "Select * From inquiry WHERE id='$id'";
$result = mysql_query($sql);


?>

<?php
while($row=mysql_fetch_array($result))

$name = $row['cname'];;
$email = $row['email'];;
$phone = $row['phone'];;
$sdate = $row['sdate'];;
$edate = $row['edate'];;
$fdate = $row['fdate'];;

?>




<!-- Code Begins -->
<center>
<div class="vpb_main_wrapper">

<br clear="all">
<form method="post" action="edit_ac.php">
<h2 align="left" style="margin-top:0px;">Edit Operator</h2><br />

<div align="left" style="font-family:Verdana, Geneva, sans-serif; font-size:11px; margin-bottom:10px;">Edit operator Details.</div><br />

<div style="width:115px; padding-top:10px;float:left;" align="left"> Full Name:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="cname" id="cname" value="<?php echo $name; ?>" class="vpb_textAreaBoxInputs" required>
</div><br clear="all"><br clear="all">

<div style="width:115px; padding-top:10px;float:left;" align="left"> Email:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="email" id="email" value="<?php echo $email; ?>" class="vpb_textAreaBoxInputs" required>
</div><br clear="all"><br clear="all">


<div style="width:115px; padding-top:10px;float:left;" align="left">Mobile:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="phone" id="phone" value="<?php echo $phone; ?>" required class="vpb_textAreaBoxInputs">
</div><br clear="all"><br clear="all">


<div style="width:115px; padding-top:10px;float:left;" align="left">Start Date:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="sdate" id="sdate" value="<?php echo $sdate; ?>" required class="vpb_textAreaBoxInputs">
</div><br clear="all"><br clear="all">


<div style="width:115px; padding-top:10px;float:left;" align="left">End Date:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="edate" id="edate" value="<?php echo $edate; ?>" required class="vpb_textAreaBoxInputs">
</div><br clear="all"><br clear="all">


<div style="width:115px; padding-top:10px;float:left;" align="left">Date of Journey:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="fdate" id="fdate" value="<?php echo $fdate; ?>" class="vpb_textAreaBoxInputs" required>
</div><br clear="all"><br clear="all">

<input name="id" type="hidden" id="id" value="<?php echo $row['id']; ?>">

<div style="width:115px; padding-top:10px;float:left;" align="left">&nbsp;</div>
<div style="width:300px;float:left;" align="left">
<input type="submit" name="submit" id="submit" value="Submit" style="margin-left: 100px" class="vpb_general_button">

</div>

</form>
<br clear="all"><br clear="all">

</div><?php  ?>
</center>
<!-- Code Ends -->


<!-- Inquiry Table Ends here -->

这是我的edit_ac.php

  <?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="pro1"; // Database name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$name = $_POST['cname'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$sdate = $_POST['sdate'];
$edate = $_POST['edate'];
$fdate = $_POST['fdate'];

// update data in mysql database
$sql="UPDATE inquiry SET 
      cname = '$name', 
      email = '$email',
      phone = '$phone', 
      sdate = '$sdate', 
      edate = '$edate', 
      fdate = '$fdate'  
      WHERE id='$id'";

$result=mysql_query($sql);

// if successfully updated.
if($result)
echo "Successfull";



else 
echo "Error";


?> 

显示“0 条记录更新成功”。所以它没有在数据库中更新。有什么问题请帮忙。

【问题讨论】:

在后一个脚本中没有设置任何值,例如 $id。您只是假设它已设置,但它们没有。 我也做过 $_POST 但它不起作用 再次查看帖子我已经编辑了edit_ac.php页面...仍然无法正常工作.. 你真的应该看看准备好的语句,或者至少使用mysql_real_escape_string,因为你的代码非常容易受到攻击 我从phpeasystep.com/mysql-cate.php?category=update获取的这个更新代码看看这是否有助于解决问题请帮助我 【参考方案1】:

您没有声明 $id 变量。我添加了这一行: $id = $_POST['id'];

无论如何,不​​推荐使用 mysql 函数:改用 mysqli。

<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="pro1"; // Database name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$id = $_POST['id'];
$name = $_POST['cname'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$sdate = $_POST['sdate'];
$edate = $_POST['edate'];
$fdate = $_POST['fdate'];

// update data in mysql database
$sql="UPDATE inquiry SET 
  cname = '$name', 
  email = '$email',
  phone = '$phone', 
  sdate = '$sdate', 
  edate = '$edate', 
  fdate = '$fdate'  
    WHERE id='$id'";

$result=mysql_query($sql);

// if successfully updated.
if($result)
echo "Successfull";



else 
echo "Error";


?>

【讨论】:

【参考方案2】:

我认为,问题在于您在这两种情况下都没有正确地将 $id 变量传递给查询:

你这样做:

WHERE id='$id'"

你应该:

WHERE id=" . $id .""

编辑 1: 尝试通过打印 $id 变量来检查,如果你真的设置了它:

var_dump($id);

编辑 2:

用其他变量完成剩下的工作:

$sql = "UPDATE 
          inquiry
        SET 
          cname = " . $name . ", 
          email = " . $email . ",
          phone = " . $phone . ", 
          sdate = " . $sdate . ", 
          edate = " . $edate . ", 
          fdate = " . $fdate . "  
        WHERE 
          id=" . $id . "";

还可以尝试打印并检查您是否真的收到$name, $email, $phone 等。

【讨论】:

它显示一个错误...之前它显示一个成功的味精(虽然没有在数据库中更新)但现在应用它之后它甚至没有显示成功味精。这会导致错误。 @SanjeevSarkar 如果将id='$id' 替换为id=" . $id .",则不应显示错误。阅读编辑1 我回应了它,我可以得到那个值......但更新不起作用。 我从phpeasystep.com/mysql-cate.php?category=update获取的这个更新代码看看这是否有助于解决问题请帮助我【参考方案3】:

将您的 id 值存储在 Session 中,以便您也可以在不同的页面上使用它。这里编辑文件没有ID。

希望对你有帮助。

【讨论】:

我从phpeasystep.com/mysql-cate.php?category=update 获取的这个更新代码以前一直对我有用,但现在它不起作用了。 不知道你过去的经验,但我在这里看到的是编辑查询没有得到 ID 值。我建议尝试我的解决方案,如果您不知道 SESSION 概念,请告诉我,我可以解释,但投反对票是不正确的做法。

以上是关于更新 MYSQL 记录错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel save() 正在更新错误的 mysql 记录

使用 case 语句从 SELECT 更新记录。 (mysql)

无法将多条记录更新到mysql

mySQL:更新记录/重复条目/整理/二进制

尝试在存储过程中更新时出现 MySQL 错误代码 1175

MySQL:如何更新时间最近的一条记录