gpt4 book ai didi

php - 更新单个特定 MySQL 单元不起作用

转载 作者:行者123 更新时间:2023-11-29 10:37:48 26 4
gpt4 key购买 nike

我对 PHP/MySQL 相当陌生,但我在网上找不到我的问题的答案:

我有一个包含 4 个文本字段的表单

    <form method="post" action="updateuserdatatest.php">
<input type="text" value="Hans" name="username">
<input type="text" value="1234" name="password">
<input type="text" value="desired cell" name="desiredcell">
<input type="text" value="desired value" name="desiredvalue">
<input type="submit">
</form>

我想用“所需值”更新命名的“所需单元格”。所以我必须输入用户名、密码、列名(即“街道名称”、“邮政编码”或“城市”),然后输入要提交到数据库的字符串值。

我使用此代码:

    $pdo = new PDO(everything is OK here! - Checked this out many times);
$sql = 'UPDATE user SET :desiredcell = :desiredvalue WHERE username = :username AND password = :password';

$stmt = $pdo->prepare($sql);

$stmt->bindValue(":desiredcell", $_POST['desiredcell'], PDO::PARAM_STR);
$stmt->bindValue(":desiredvalue", $_POST['desiredvalue'], PDO::PARAM_STR);
$stmt->bindValue(":username", $_POST['username'], PDO::PARAM_STR);
$stmt->bindValue(":password", $_POST['password'], PDO::PARAM_STR);
$stmt->execute();

if ($stmt->errno) { echo "FAILURE!!! " . $stmt->error;
}
else echo "Updated {$stmt->affected_rows} rows";

$response = array();
$response['success'] = true;

echo json_encode($response);

?>

这不起作用!

但是当我将 sql 查询更改为特定列名时,如 'UPDATE user SET streetname = :desiredvalue WHERE username = :username AND password = :password';

然后就可以了!为什么?我想输入必须手动更新的单元名称!

我之前用mysqli查询尝试过这个,比如UPDATE user SET ?=?密码在哪里=? AND username=? 同样的问题

我做错了什么?提前致谢。

编辑:似乎我无法在评论中发布图片,所以我做了另一个答案:这是我的虚拟表,

enter image description here

当我尝试像您的示例一样插入列变量时,表内没有任何反应,但我仍然得到成功响应。

    $column = in_array($_POST['desiredcell'], ['streetname', 'postcode','state']) ? $_POST['desiredcell'] : 'streetname';          
$sql = 'UPDATE user SET $column = :desiredvalue WHERE username = :username AND password = :password';

$stmt = $pdo->prepare($sql);

$stmt->bindValue(":desiredvalue", $_POST['desiredvalue'], PDO::PARAM_STR);
$stmt->bindValue(":username", $_POST['username'], PDO::PARAM_STR);
$stmt->bindValue(":password", $_POST['password'], PDO::PARAM_STR);
$stmt->execute();

有什么建议吗? =/

编辑:找到解决方案:

$sql = 'UPDATE user SET '.$column.' = :desiredvalue WHERE username = :username AND password = :password';

谢谢大家。

最佳答案

正如注释中提到的,您无法绑定(bind)列名称。您应该使用变量并确保输入是真实的列名称(出于安全原因)

示例:

<?php
$column = in_array($_POST['desiredcell'], ["column1", "column2"]) ? $_POST['desiredcell'] : "column1";
$sql = "UPDATE user SET $column = :desiredvalue WHERE username = :username AND password = :password'";

另请记住,在数据库中存储纯文本密码是一个非常糟糕的主意。检查password_hash功能。

关于php - 更新单个特定 MySQL 单元不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46111639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com