从PHP变量更新DB数据

时间:2014-09-26 07:37:45

标签: php mysql variables pdo sql-update

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

当我尝试没有$变量时,没有问题!但问题是,我有很多这样的查询,但没有更新。

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时,它们会显示出来,因此它们不是空的。但是这个查询更新了我的表但没有数据,所以之后一切都是空的。

6 个答案:

答案 0 :(得分:0)

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

除了全局变量之外,在函数外定义的变量不能用于函数。

你有两种方法。

首先。如果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

答案 1 :(得分:0)

你可以试试这个:

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

答案 2 :(得分:0)

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;
    }
}

答案 3 :(得分:0)

获取后变量然后检查这些变量 这些是否是空的 如果不为空或NULL则使用具有非空变量的更新查询更新数据库

答案 4 :(得分:0)

可能是

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

如果那些不起作用

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

抱歉我的英文不好

答案 5 :(得分:0)

此功能几乎没有问题:

  • 范围问题,您没有传递所有值
  • 您很容易受到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';
}