haw*_*row 6 php mysql sql pdo prepare
我有一个网络程序,允许管理员更新用户的信息......话虽如此,我只想要更新的列确实已经'更新'...
我已经对此进行了相当多的研究,似乎所有方法都使用过时的查询,它们没有利用prepare语句来逃避输入......
有人可以帮我说说吗?
基本上在伪代码中:
Update FIRSTNAME if $editedUserdata['firstname'] != FIRSTNAME, LASTNAME if $editedUserData['lastname']!= LASTNAME ...等...
这是我对邮政编码的看法......
$password = sha1($password);
$editedUserData = array(
'firstname' => $firstname,
'lastname' => $lastname,
'username' => $username,
'password' => $password,
'cellphone' => $cellphone,
'security_level' => $seclvl,
'email' => $email,
'direct_phone' => $direct,
'ext_num' => $extension,
'is_active' => $userflag
);
Run Code Online (Sandbox Code Playgroud)
那应该是这样的
$query = $this->db->prepare('UPDATE FIRSTNAME if(?) IS NOT FIRSTNAME, LASTNAME if(?) IS NOT LASTNAME, USERNAME if (?) IS NOT USERNAME.... VALUES (:firstname, :lastname, :username).....'
if ($query -> execute($editedUserData)) {
more code....
Run Code Online (Sandbox Code Playgroud)
Old*_*der 20
根据MySQL文档 - 参考:(http://dev.mysql.com/doc/refman/5.0/en/update.html)
"如果你将列设置为它当前具有的值,MySQL会注意到这一点并且不会更新它."
也许我不理解你试图解决的问题,但你不必测试字段值是否确实改变了.
如果字段值为"A"并且您在那里放置"A"则保持不变,否则如果您放置"B"它将按预期更新
准备好的陈述就像是
$stmt = $dbh->prepare("
UPDATE table_name
SET
field1 = :value1,
field2 = :value2
WHERE
field0 = :key
");
$stmt->bindParam(':value1', $value1, PDO::PARAM_STR);
$stmt->bindParam(':value2', $value2, PDO::PARAM_STR);
$stmt->bindParam(':key', $key, PDO::PARAM_INT);
$stmt->execute()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9559 次 |
| 最近记录: |