从PHP变量更新数据库数据
我对SQL语句中的变量有问题。我有一个表单,用户可以在其中更新他的个人资料。表单重定向到action.php?action=settings 当我尝试不使用$variables时,没有问题!但问题是,我有很多这样的查询,但不是为了更新从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
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';
}