我有以下代码:
$result = mysqli_prepare($con, "select pass from signin where domain = ? and username = ? for update");
//Check if record is available
//Do some checking here that pass is correct
//Then I need a new hash for the password so I use (after making the new hash)
$resultnew = mysqli_prepare($con, "update signin set pass = ? where domain = ? and username = ?");
所以一切都在这里运作良好!
但我不喜欢的是,由于我已经拥有第一个select语句的记录,因此更新语句必须再次使用域和密码查找记录时会浪费时间。
有没有办法在执行检查后直接更新第一个select语句的传递?简而言之,有这样的事情,或者我应该坚持我正在做的事情:
password = select pass from signin where domain = ? and username = ?;
//checking and making new hash
set password = $newhash
答案 0 :(得分:2)
您应该为数据库的每一行使用唯一的ID。这应该是一个索引,最好是自动增量。这样一个表的一个例子:
CREATE TABLE IF NOT EXISTS `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
<other columns>
PRIMARY KEY (`ID`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
如果您返回ID和密码,您可以使用ID直接为UPDATE命令选择正确的行。
UPDATE signin
SET pass = ?
WHERE id = ?
由于ID是您的主要索引,因此非常快。