【问题标题】:Changing MysQL value with PHP not with user id but username?使用 PHP 更改 MySQL 值而不是用户 ID 而是用户名?
【发布时间】:2018-03-12 16:33:04
【问题描述】:

我正在尝试在您放置 user_id 等的地方制作简单的表格,它会在 mysql 中发生变化,这工作得很好,但问题是,有什么办法可以代替 users_ids 使用用户名?谢谢

if(isset($_POST['btn-change'])) {

    $account = strip_tags($_POST['account']);
    $value = strip_tags($_POST['value']);
    $string = strip_tags($_POST['string']);

    $account = $DBcon->real_escape_string($account);
    $value = $DBcon->real_escape_string($value);
    $string = $DBcon->real_escape_string($string);

    $sql = "UPDATE tbl_users SET $value='$string' WHERE user_id=$account";

    if ($DBcon->query($sql) === TRUE) {
        $msg1 = '<div class="alert alert-success">
                        <i class="fa fa-info" aria-hidden="true"></i> &nbsp; Successfully changed !
                    </div>';
    } else {
        $msg1 = '<div class="alert alert-danger">
                    <i class="fa fa-info" aria-hidden="true"></i></span> &nbsp; Something went wrong !
                </div>';
    }

    $DBcon->close();
}

【问题讨论】:

  • tbl_users 的结构如何?
  • 另外,你对 sql 注入持开放态度。使用准备好的语句,而不是直接查询。
  • 为什么不能使用用户名?
  • “有什么办法可以代替 users_ids 使用用户名” ...是的,但我们需要有关您的架构的更多信息。
  • 是吗?你试过什么?就像"UPDATE tbl_users SET field=:value WHERE user_name = :username; 一样简单——因为你应该使用 PDO....

标签: php mysql userid


【解决方案1】:

原来的 MySQL 扩展已在 PHP7 中删除,并在 PHP 5.5 中被弃用。

不过不要被 PDO 吓倒,它实际上超级简单而且好得多。

在任何需要进行数据库查询的 PHP 文件的开头都需要此代码。

$host = "127.0.0.1";
$port = "3306";
$dbname = "NameOfTheDatabase";
$dsn = "mysql:host=$host;dbname=$dbname;port=$port;";

$dbuser = "UsernameForDatabase";
$dbpass = "PasswordForDatabase";

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8");

$database = new PDO($dsn, $dbuser, $dbpass, $options);

请注意,它可以大幅改进,但为了举例,我们将保持简单。通常你会想从一个受保护的配置文件中加载这些信息。

现在假设我们要通过用户名来选择用户。

$statement = $database->prepare("
    SELECT user_id 
    FROM tbl_users 
    WHERE username LIKE :username
");

$statement->bindParam("username", $_POST['username'], PDO::PARAM_STR);

$statement->execute();

$result = $statement->fetch(PDO::FETCH_OBJ);

echo $result->user_id;

基本上,我们在这里所做的是告诉 PDO 将我们准备好的查询存储在 $statement 变量中。然后我们告诉它使用bindParam() 替换或绑定 :username 与 POST 变量(这将负责转义)。

使用execute() 执行语句后,我们有两个选择。 fetch() 函数本质上获取下一个(或在本例中为第一个)返回的行并将其存储在 $result 变量中。之后,您可以使用其名称访问返回的列,在本例中为 $result->user_id。但是,如果您选择了排名,例如,您将能够使用 $result->rank 访问它。

第二个选项是fetchAll() 函数,它的工作方式几乎相同,只是它获取返回的每一行并将其存储在一个数组中。即使只返回一行。这意味着您需要使用 $result[0]->user_id 访问数据,其中 0 是返回的行。

foreach($result as $row){
    echo $row->user_id;
}

或者你可以使用上面的 foreach 遍历结果数组。我认为 PHP 最伟大的功能之一。

除了执行函数不返回任何行之外,更新和插入的工作方式几乎相同。而是返回更改的行数。

$statement = $database->prepare("
    UPDATE tbl_users
    SET email = :email
    WHERE user_id = :user_id
");

$statement->bindParam("email", $_POST['email'], PDO::PARAM_STR);
$statement->bindParam("user_id", $_POST['account'], PDO::PARAM_INT);

$statement->execute();

echo "Rows changed: ".$statement->rowCount();

在该示例中,我们只是使用电子邮件的 POST 变量和 user_id 的帐户变量来更新用户的电子邮件地址。请注意,我使用 PDO::PARAM_INT 作为 bindParam 的第三个参数,这只是因为 user_id 是一个整数。通常你可以使用 PDO::PARAM_STR 但它应该用于字符串。

如果你想要比我更擅长解释的人提供更多细节,check this introduction to PDO out。希望这能让你走上正轨!

【讨论】:

  • 祝你好运!开始有点困惑,但这些是每个 PHP 应用程序中使用的基本概念,所以如果你能理解这一点,你就可以掌握 PHP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2021-05-07
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多