イムを動作しますが、私は私の問題のためにネットには答えを見つけない:UPDATE単一の特定のMySQLの細胞は文句を言わない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>
でフォームを持っています私は、 "希望する値"で、 "希望するセル"という名前の更新をしたいと思います。 だから私は、ユーザー名、パスワード、列名(すなわち、 "streetname"、 "postcode"または "city")を入力しなければならず、その後にstringvalueをデータベースに提出しなければなりません。
私はこのコードを使用します。
$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);
?>
これは動作しません!
しかし、私は'UPDATE user SET streetname = :desiredvalue WHERE username = :username AND password = :password';
のような特定のColumnNameにするには、SQLクエリを変更するとき、それは働きます!どうして? 私は手動で更新する必要があるcellnameをタイプしたいと思う!
私は私が間違って何をやっている
がUPDATE user SET ?=? WHERE password=? AND username=?
同じ問題のように前にmysqliのクエリでこれを試してみましたか? ありがとうございます。
編集:私はあなたの例のように列変数を挿入しようとすると、 これは私のダミーのテーブルで、
: は、私がコメントに画像を投稿傾けるようですので、私は別の答えを作りますテーブルの中で何も起こらないが、私はまだ成功の応答を得る。
$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();
ヒント? =/
EDIT: ソリューションが見つかりました:
$sql = 'UPDATE user SET '.$column.' = :desiredvalue WHERE username = :username AND password = :password';
は君たちに感謝します。
[PDO](http://php.net/manual/en/book.pdo.php)では、テーブル名とカラム名を置き換えることはできません。この質問を参照してください:https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-name-as-parameter – surfer190
[PHP PHP PDOステートメントが受け入れることができるパラメータとしての表または列の名前?](https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-name-as-parameter) – Qirel
PDOもMySQLiは有界表または列名をサポートしています。** IFのクエリで変数を直接使用することができます。**を使用する場合は、最初にホワイトリストを作成します(基本的に入力が何であるかを確認し、適切な列/テーブルを持つ独自のサーバーサイド定義変数を使用します)。 – Qirel