Php mysql查询已成功执行,但行中没有更改

Php mysql查询已成功执行,但行中没有更改,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我已经为mysql数据库中的更新信息创建了一个php文件。它将从html表单获取输入,然后通过匹配ID更新数据。如下所示: <? $con = mysql_connect("localhost","root",""); mysql_select_db("workshop", $con); $sql = "UPDATE apply SET staffname=' ".$_POST['name']." ', staffno=' ".$_POS

我已经为mysql数据库中的更新信息创建了一个php文件。它将从html表单获取输入,然后通过匹配ID更新数据。如下所示:

<?
$con = mysql_connect("localhost","root","");
mysql_select_db("workshop", $con);
$sql = "UPDATE apply 
          SET staffname=' ".$_POST['name']." ', 
              staffno=' ".$_POST['contact']." ',
              staffemail=' ".$_POST['mail']." ',
              staffaddress=' ".$_POST['address']." ',
              paytype=' ".$_POST['paytype']."'
        WHERE 
            staffid=' ".$_POST['ic']." '";
$result = mysql_query($sql);
printf("Records updated: %d\n", mysql_affected_rows());
    if($result){
        echo "Successful";
}
    else {
        echo "ERROR";
}

mysql_close($con);
?>

您需要提交查询或将autoCommit标志设置为true(如果您的上下文中存在这种情况)

您的where子句与任何记录匹配吗?是否
printf(“更新的记录:%d\n”,mysql\u受影响的行())打印一些受影响的行数


可能
staffid='“$\u POST['ic']”。”“
与任何记录都不匹配,这是因为artragis提到了空格。

您需要提交查询或将autoCommit标志设置为true(如果您的上下文中存在这样的情况)

where子句是否与任何记录匹配?
printf(“更新的记录:%d\n”,mysql\u受影响的行());
是否打印一些受影响的行


可能是
staffid='“$\u POST['ic']”。”“
与任何记录都不匹配,因为artragis提到了封闭空格。

我会在生产中小心使用此代码,因为它看起来容易受到SQL注入的影响。我会检查PDO,以便进行安全的mysql数据库通信


如果尚未执行此操作,请确保记录或回显$\u POST['ic']变量,以确保将其设置为您认为的值。

我会在生产中小心使用此代码,因为它看起来容易受到SQL注入的攻击。我会检查PDO,以便进行安全的mysql数据库通信


如果尚未执行此操作,请确保记录或回显$\u POST['ic']变量,以确保将其设置为您认为的值。

代码中有很多内容需要说明:

首先使用mysql_uuAPI,尽管它已被弃用,但应该使用PDO或mysqli

然后,每次都添加空格,这不利于匹配ID

而且,您很容易受到sql注入的攻击

我将为您提供MySQLIAPI代码,因为您只需去掉“I”即可获得MySQLIAPI代码

$sql = "UPDATE apply 
      SET staffname='".mysqli_real_escape_string($con,$_POST['name'])."', 
          staffno='".mysqli_real_escape_string($con,$_POST['contact'])."',
          staffemail='".mysqli_real_escape_string($con,$_POST['mail'])."',
          staffaddress='".mysqli_real_escape_string($con,$_POST['address'])."',
          paytype='".mysqli_real_escape_string($con,$_POST['paytype'])."'
    WHERE 
        staffid='".mysqli_real_escape_string($con,$_POST['ic'])."'";
  $result = mysqli_query($con,$sql);
printf("Records updated: %d\n", mysql_affected_rows());
if($result){
    echo "Successful";
}
else {
    echo "ERROR";
}

在代码中有很多东西要说:

首先使用mysql_uuAPI,尽管它已被弃用,但应该使用PDO或mysqli

然后,每次都添加空格,这不利于匹配ID

而且,您很容易受到sql注入的攻击

我将为您提供MySQLIAPI代码,因为您只需去掉“I”即可获得MySQLIAPI代码

$sql = "UPDATE apply 
      SET staffname='".mysqli_real_escape_string($con,$_POST['name'])."', 
          staffno='".mysqli_real_escape_string($con,$_POST['contact'])."',
          staffemail='".mysqli_real_escape_string($con,$_POST['mail'])."',
          staffaddress='".mysqli_real_escape_string($con,$_POST['address'])."',
          paytype='".mysqli_real_escape_string($con,$_POST['paytype'])."'
    WHERE 
        staffid='".mysqli_real_escape_string($con,$_POST['ic'])."'";
  $result = mysqli_query($con,$sql);
printf("Records updated: %d\n", mysql_affected_rows());
if($result){
    echo "Successful";
}
else {
    echo "ERROR";
}

代码以一种非常糟糕的方式为SQL注入打开。请不要在您的网站上使用它。使用PDO或MySQLi函数

但是你的手机确实有间隔问题

staffid=' ".$_POST['ic']." '";
应该是

staffid='".$_POST['ic']."'";

代码以一种非常糟糕的方式为SQL注入打开。请不要在您的网站上使用它。使用PDO或MySQLi函数

但是你的手机确实有间隔问题

staffid=' ".$_POST['ic']." '";
应该是

staffid='".$_POST['ic']."'";
使用以下查询:

$sql = "UPDATE `apply`
        SET `staffname` = '" . mysql_escape_string($_POST['name']) . "',
            `staffno` = '" . mysql_escape_string($_POST['contact']) . "',
            `staffemail` = '" . mysql_escape_string($_POST['mail']) . "',
            `staffaddress` = '" . mysql_escape_string($_POST['address']) . "',
            `paytype` = '" . mysql_escape_string($_POST['paytype']) . "'
        WHERE `staffid` = '" . mysql_escape_string($_POST['ic']) . "'";
编辑

最好使用PDO或mysqli而不是mysql_*函数 但目前,上述解决方案可能有效。

使用以下查询:

$sql = "UPDATE `apply`
        SET `staffname` = '" . mysql_escape_string($_POST['name']) . "',
            `staffno` = '" . mysql_escape_string($_POST['contact']) . "',
            `staffemail` = '" . mysql_escape_string($_POST['mail']) . "',
            `staffaddress` = '" . mysql_escape_string($_POST['address']) . "',
            `paytype` = '" . mysql_escape_string($_POST['paytype']) . "'
        WHERE `staffid` = '" . mysql_escape_string($_POST['ic']) . "'";
编辑

最好使用PDO或mysqli而不是mysql_*函数
但目前,上述解决方案可能会起作用。

您不应该在新闻代码中使用mysql_u;API,您应该首选PDO或mysqli,例如使用prepared语句。您的代码可以进行sql注入。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,。确定要在字符串周围添加空格吗?
$\u POST['ic']
不应该是“id”吗?!您不应该在新闻代码中使用mysql_uuAPI,您应该更喜欢PDO或mysqli,例如带有prepared语句。您的代码是开放的,可以进行sql注入。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,。确定要在字符串周围添加空格吗?
$\u POST['ic']
不应该是“id”吗?!他使用mysql\u查询,默认情况下,autocommit标志为true。好的,那么我们希望他的环境使用默认值。@Hyperboreus:这不算太长;更改的破坏性太大了,您必须愚蠢地将其设置为全局默认值。他使用mysql\u查询,默认情况下自动提交标志为true。好的,那么让我们希望他的环境使用默认值。@Hyperboreus:这没什么大不了的;更改太多了,您必须愚蠢地将其设置为全局默认值。感谢您的代码:)让我看看如何通过mysqli连接,然后我必须使用此代码!再次非常感谢!我得到了一个类似警告的错误:mysqli_real_escape_string()需要2个参数,1个在第35行的C:\xampp\htdocs\work\edit_data.php中给出:
SET staffname='''.”。mysqli_real_escape_string($\u POST['name'])。“,
ok您必须像在查询中一样将mysqli连接resource作为参数。这是为了确保您的数据库使用的编码。感谢您的代码:)让我找到如何通过mysqli连接,然后我必须使用此代码!再次非常感谢!我得到了一个类似警告的错误:mysqli_real_escape_string()需要2个参数,1个在第35行的C:\xampp\htdocs\work\edit_data.php中给出:
SET staffname='''.”。mysqli_real_escape_string($\u POST['name'])。“,
ok您必须像在查询中一样将mysqli连接resource作为参数。这是为了确保数据库使用的编码。