我有一个像这样的文本文件
1 wordsgohere
2 morewordsgohere
3 yougetthepoint
我想将上面的一个字符串分配给该人的user_id。所以说你是第三个注册的人,你的user_id是3,你的deposit_id将是'yougetthepoint'。
// write new users data into database
$query_new_user_insert = $this->db_connection->prepare('INSERT INTO users (deposit_id, user_name, user_password_hash, user_email, user_activation_hash, user_registration_ip, user_registration_datetime) VALUES(:deposit_id, :user_name, :user_password_hash, :user_email, :user_activation_hash, :user_registration_ip, now())');
$query_new_user_insert->bindValue(':deposit_id', 'placeholderid', PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_name', $user_name, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_password_hash', $user_password_hash, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_email', $user_email, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_activation_hash', $user_activation_hash, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_registration_ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$query_new_user_insert->execute();
// id of new user
$user_id = $this->db_connection->lastInsertId();
// searches text file for address
$lines_array = file("test.txt");
foreach($lines_array as $line) {
echo $line;
if(strpos($line, $user_id) != false) {
list(, $new_str) = explode($user_id, $line);
}
}
现在将deposit_id放入new_str。现在我需要使用new_str更新表中的deposit_id。
任何帮助都会很棒。
试过这个并且无法让它更新。我只是想看看我是否只能更新第一个用户deposit_id。
$query_new_user_update = $this->db_connection->prepare('UPDATE users set deposit_id :deposit_id where user_id =1');
$query_new_user_update->bindValue(':deposit_id', 'doesthischange', PDO::PARAM_STR);
$query_new_user_update->execute();
答案 0 :(得分:1)
你需要在底部添加这样的东西:
$query_new_user_update = $this->db_connection->prepare('UPDATE users set deposit_id = :deposit_id where user_id = last_insert_id()');
$query_new_user_update->bindValue(':deposit_id', $new_str, PDO::PARAM_STR);
$query_new_user_update->execute();
在这种情况下,last_insert_id()
是一个本机mysql函数,您可以在SQL中调用它。
修改强>
顺便说一下,你可能想要改变
if(strpos($line, $user_id) != false) {
// bad: does not recognize strings that start with $user_id.
// It only recognizes strings that contain $user_id when
// the $user_id is not at the start of the line.
到
if(strpos($line, $user_id . ' ') === 0) {
// good: only recognizes string that start with
// $user_id followed by a white space
!= false
效果不佳,因为当一行以user_id开头时,str_pos
将返回0
,这意味着在字符位置0找到了user_id。但是{{1} },因为它松散比较。因此,您现在需要使用严格比较的0 == false
来检查匹配类型。 ===
,因为0是INT而false是BOOL。
还要避免将user_id(EG 0 !== false
)与右侧文本中的任何数字进行匹配。或者与包含该数字的其他user_id一起使用。 (EG 1
,11
,12
等。您还需要使用user_id搜索 start 的字符串,并检查< user_id之后的strong>空格。