【问题标题】:Searching a file and storing it in a variable php搜索文件并将其存储在变量 php 中
【发布时间】: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_id3 并且$line13 something,它将匹配。您应该分解该行,并将用户 ID 与数组的第一个元素进行比较。
  • 你应该使用FILE_IGNORE_NEW_LINES 选项到file(),否则$line 的末尾会有一个换行符,这是你可能不想要的。
  • @Barmar 但是如果我把它放在插入之后,用户将被插入,然后我才能决定为 deposit_id 存储什么值。有什么建议么?我还添加了explode()。我将很快为 3 和 13 的问题添加额外的爆炸,并在最后修复换行符。感谢您指出所有这些。

标签: php mysql search


【解决方案1】:

正如某些人在您的 cmets 中提到的,您应该检查语句的顺序。

首先将行插入到数据库中。执行时,数据库将生成您之后可以检索的 ID。

现在您想将 Deposit_id 添加到生成的条目中。只需更新条目 (UPDATE users SET deposit_id=:deposit_id WHERE user_id=:user_id;)。

但我认为你会得到一个你不想要的结果。

文本文件中的数字真的是 user_id 吗?还是只是一个枚举?您可以解析它并按文件顺序创建一个包含 deposit_ids 的数组。现在您可以通过对每个数组条目运行一次插入来插入所有行

【讨论】:

  • 订单已修复。我尝试了您发布的代码,但没有成功。文本文件中的数字只是枚举。我想摆脱它并按照您所说的那样做会在不止一种方式上更有效。现在我只是有将该值插入数据库的问题。
  • 好的,这样您就可以在没有 deposit_id 的情况下将条目添加到数据库中。该列有哪些属性?是外键吗?或者它只是一个没有任何链接到另一个表的随机字符串?也许您应该考虑将此信息放入另一个表中,因为您将有 2 个条目包含几乎相同的信息,但 deposit_id 除外。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2018-03-23
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多