从PHP变量更新数据库数据

从PHP变量更新数据库数据,php,mysql,variables,pdo,sql-update,Php,Mysql,Variables,Pdo,Sql Update,我对SQL语句中的变量有问题。我有一个表单,用户可以在其中更新他的个人资料。表单重定向到action.php?action=settings 当我尝试不使用$variables时,没有问题!但问题是,我有很多这样的查询,但不是为了更新 function change_user_data($trainer) { require("database.php"); try { $results = $db->query("UPDATE trainer SET e

我对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


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

我认为问题在于可变范围

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

你有两种方法

首先。如果change_user_data函数位于action.php文件中,请添加全局$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;
    }
}
或者第二个。将电子邮件、状态、密码数据传递给函数。那你就可以用了

请检查本手册:

您可以尝试以下方法:

$results = $db->query("UPDATE trainer SET email='".$email."', status='".$status."', password='".$password."' WHERE name='".$trainer."'");        

在获得Post变量后,检查这些变量 不管那些是不是空的 如果不为空或NULL,则可以使用带有非空变量的Update查询更新数据库

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

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


抱歉,我的英语不好

此功能没有什么问题:

范围问题,您没有传递所有值 您容易受到sql注入的攻击 您不会检查记录是否已更新 功能:

用法


我不是PHP方面的专家,但是从,我认为在查询中连接数据有问题。然而,这似乎倾向于SQL注入,最好在诊断正确时使用,而处方可能不正确。请不要建议将全局变量用于如此简单的事情,它可以通过向函数中添加参数来完成,所以这对我来说很有效,但我像Touregsys所写的那样:更改用户数据$trainer,$email,$password,$status;我认为这是解决这类问题的最好办法,或者你认为呢?你能告诉我为什么我应该使用全球服务吗
$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;
    }
}
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';
}