更新已经执行PHP的表

时间:2013-12-21 20:40:39

标签: php mysql database

我有一个像这样的文本文件

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();

1 个答案:

答案 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 11112等。您还需要使用user_id搜索 start 的字符串,并检查< user_id之后的strong>空格