【发布时间】:2013-12-21 14:40:45
【问题描述】:
我有一个像这样的文本文件
1 wordsgohere
2 morewordsgohere
3 yougetthepoint
我想将上面的字符串之一分配给那个人的 user_id。假设您是第三个注册的人,您的 user_id 为 3,您的 deposit_id 将是“yougetthepoint”。但是,当我回显 user_id 时,即使数据库中有 2 或 3 个用户,并且在查看数据库时,id 号也会增加,但它始终为 0。它也不会将用户放入数据库中。如果我用其他东西替换 deposit_id,它会将用户放入数据库中。我认为这是因为 new_str 从未被定义。
// id of new user
$user_id = $this->db_connection->lastInsertId();
echo $user_id;
// 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);
}
}
// 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', $new_str, 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();
任何帮助都会很棒,谢谢。
【问题讨论】:
-
您在拨打
INSERT之前先拨打lastInsertId()。你希望它预测未来吗? -
list(, $new_str) = $line无法工作。当您使用list()时,值必须是数组,而不是字符串。你的意思是打电话给explode()? -
您的
strpos()支票不好。如果$user_id是3并且$line是13 something,它将匹配。您应该分解该行,并将用户 ID 与数组的第一个元素进行比较。 -
你应该使用
FILE_IGNORE_NEW_LINES选项到file(),否则$line的末尾会有一个换行符,这是你可能不想要的。 -
@Barmar 但是如果我把它放在插入之后,用户将被插入,然后我才能决定为 deposit_id 存储什么值。有什么建议么?我还添加了explode()。我将很快为 3 和 13 的问题添加额外的爆炸,并在最后修复换行符。感谢您指出所有这些。