从PHP变量更新数据库数据


Updating DB data from PHP variables

我在SQL语句中遇到变量问题。我有一个表单,用户可以在其中更新他的个人资料。表单重定向到action.php?action=settings

当我尝试不使用$variables时,没有问题但问题是,我有很多这样的查询,但不是为了更新。

function change_user_data($trainer) {
    require("database.php");
    try {
        $results = $db->query("UPDATE trainer SET email='$email', status='$status', password='$password' WHERE name='$trainer'");        
    } catch (Exception $e) {
        echo "Data could not be changed!";
        exit;
    }
}

这是我的action.php

if ($action == "settings")  {
    $email = $_POST['email'];
    $status = $_POST['status'];
    $password = $_POST['password'];
    change_user_data($trainer);
} 

当我echo那些$variables时,它们会被显示出来,所以它们不是空的。但是这个查询更新了我的表,但没有任何数据,所以之后所有内容都是空的。

我认为问题在于可变范围。

在函数外定义的变量不能在函数中使用,全局变量或其他变量除外。

你有两种方法。

首先。如果change_user_data函数在action.php文件中,则添加"global$email,$status,$password",如下所示:

function change_user_data($trainer) {
    global $email, $status, $password;
    require("database.php");
    try {
        $results = $db->query("UPDATE trainer SET email='$email', status='$status', password='$password' WHERE name='$trainer'");        
    } catch (Exception $e) {
        echo "Data could not be changed!";
        exit;
    }
}

或者第二个。将电子邮件、状态、密码数据传递给功能。然后你就可以使用它了。

请查看本手册:

http://php.net/manual/en/language.variables.scope.php

你可以试试这个:

$results = $db->query("UPDATE trainer SET email='".$email."', status='".$status."', password='".$password."' WHERE name='".$trainer."'");        
change_user_data($trainer, $email, $password, $status);
function change_user_data($trainer, $email, $password, $status) {
    require("database.php");
    try {
        $results = $db->query("UPDATE trainer SET email='$email', status='$status', password='$password' WHERE name='$trainer'");        
    } catch (Exception $e) {
        echo "Data could not be changed!";
        exit;
    }
}

获取后发布变量,然后检查这些变量不管那些是不是空的如果不是空或NULL,则使用非空变量更新查询更新数据库

可能是

  • 列的数据类型错误。仔细检查你的桌子结构。示例:如果将列电子邮件设置为int,则无法将其行值插入或更新为文本或字母
  • 单引号内的变量不正确。尝试连接变量和查询字符串以获得更好的实践

如果这些不起作用

尝试使mysql语法错误,并检查这些变量的值,然后可以定义错误。

抱歉我的英语不好

这个函数很少有问题:

  • 范围界定问题,您没有传递所有值
  • 您容易受到sql注入的攻击
  • 你不检查记录是否更新

功能:

function change_user_data($db, $params) {
    try {
        $sql = "UPDATE trainer SET email= ?, status=?, password=? WHERE name=?";
        $stmt = $db->prepare($sql);  
        $stmt->execute($params);
        $success = ($stmt->rowCount() > 0) ? true : false;
    } catch (Exception $e) {
        echo "Data could not be changed!";
        $success = false;
    }
return $success;
}

用法

require("database.php");
$params = array($trainer, $email, $password, $status);
$user_data_updated = change_user_data($db, $params);
if($user_data_updated){
  echo 'user data updated';
}else{
  echo 'user data did not update';
}