多个查询& LastInsertId

时间:2015-06-19 04:41:24

标签: php mysql pdo

该查询有多错?我可以插入多个这样的查询吗? 我可以这样使用lastInsertId吗?

$pdo = Database::connect();
    $dflt = 'DEFAULT';

    $query1 = "INSERT INTO utilizador(email, pass, nome, dt_registo, tipo, activo) 
                  VALUES (:email, '$hashed_password', :nome, :dt_registo, :tipo, :activo)";
    $stmt = $pdo->prepare($query1);
    $stmt->execute();
    $insertedid = $pdo->lastInsertId("utilizador");

    $query2 ="INSERT INTO aluno(morada, cd_postal, cidade, utilizador_id)
                VALUES (:morada, :cpostal, :cidade,'$insertedid')";

    $stmt2 = $pdo->prepare($query2);
    $stmt2->execute();

    $hashed_password = hash( 'sha512', $_POST['password']);
    $stmt->bindParam(':email',$_POST['email']);
    $stmt->bindParam(':nome',$_POST['nome']);
    $stmt->bindParam(':dt_registo',$dflt);
    $stmt->bindParam(':tipo',$dflt);
    $stmt->bindParam(':activo',$dflt);
    $stmt->bindParam(':morada',$_POST['morada']);
    $stmt->bindParam(':cpostal',$_POST['cpostal']);
    $stmt->bindParam(':cidade',$_POST['cidade']);

    if($stmt->execute()){        
        echo "Product was created.";
    }else{
        echo "Unable to create product.";
    }
    Database::disconnect();
}
catch(PDOException $exception){
    echo "Error: " . $exception->getMessage();
}

我已经在搜索,但无法在查询中找到如何使用这两种解决方案,而且我已经过期所有解决方案,不确定哪个是错误的。

修改 如果有人注意到某些事情,我开始认为它不仅仅是查询......

JAVASCRIPT

$(document).on('submit', '#create-aluno-form', function() {
    // show a loader img
    $('#loader-image').show();

    // post the data from the form
    $.post("registar.php", $(this).serialize())
        .done(function(data) {           
            // show create product button
            $('#create-aluno').show();
            showProducts();
        });
    return false;
});

6 个答案:

答案 0 :(得分:1)

您的语句很可能无法插入,您的代码充满了问题:

  • 您使用了prepare语句,但是您将值放在查询字符串中
  • hashed_pa​​ssword在第一个查询中未定义
  • 您尝试一次绑定多个查询
  • 错误的顺序准备第一个查询,执行,然后绑定参数 - $pdo->lastInsertId();已经足够不确定您通过"utilizador"
  • 的原因了

尝试这种方法:

try{
    $pdo = Database::connect();
    $dflt = 'DEFAULT';
    $hashed_password = hash( 'sha512', $_POST['password']);

    $query1 = "INSERT INTO utilizador(email, pass, nome, dt_registo, tipo, activo) 
                  VALUES (:email, :pass, :nome, :dt_registo, :tipo, :activo)";
    $stmt = $pdo->prepare($query1);
    $stmt->bindParam(':email',$_POST['email']);
    $stmt->bindParam(':pass',$hashed_password);
    $stmt->bindParam(':nome',$_POST['nome']);
    $stmt->bindParam(':dt_registo',$dflt);
    $stmt->bindParam(':tipo',$dflt);
    $stmt->bindParam(':activo',$dflt);
    if($stmt->execute()){
        //query1 success
        $insertedid = $pdo->lastInsertId();
        $query2 ="INSERT INTO aluno(morada, cd_postal, cidade, utilizador_id)
                  VALUES (:morada, :cpostal, :cidade, :utilizador_id)";
        $stmt2 = $pdo->prepare($query2);
        $stmt2->bindParam(':morada',$_POST['morada']);
        $stmt2->bindParam(':cpostal',$_POST['cpostal']);
        $stmt2->bindParam(':cidade',$_POST['cidade']);
        $stmt2->bindParam(':utilizador_id',$insertedid);
        if($stmt2->execute()){        
            //query2 success
        }else{
            //query2 failed
        }
    }else{
            //query1 failed
    }

    Database::disconnect();
}
catch(PDOException $exception){
    echo "Error: " . $exception->getMessage();
}

答案 1 :(得分:0)

我认为这些对你有用。

 $query = "INSERT INTO utilizador(email, pass, nome, dt_registo, tipo, activo) 
              VALUES (:email, '$hashed_password', nome, :dt_registo, :tipo, :activo)";

 $query_1 = " INSERT INTO aluno(morada, cd_postal, cidade, utilizador_id) 
                      VALUES (:morada, :cpostal, :cidade, mysql_insert_id())";

    $stmt = $pdo->prepare($query);
    $stmt_1 = $pdo->prepare($query_1);

这些对你有用。

 mysql_select_db('test');
 mysql_query("INSERT INTO mytable (name) values ('venkatesh')");
 printf("Last inserted record has id %d\n", mysql_insert_id());

谢谢。

答案 2 :(得分:0)

试试这个......

$query1 = "INSERT INTO utilizador(email, pass, nome, dt_registo, tipo, activo) 
              VALUES (:email, '$hashed_password', nome, :dt_registo, :tipo, :activo);";
    $stmt = $pdo->prepare($query1);
    $stmt->execute();

     $query2 ="INSERT INTO aluno(morada, cd_postal, cidade, utilizador_id) 
                        VALUES (:morada, :cpostal, :cidade, LAST_INSERT_ID());";
    $stmt2 = $pdo->prepare($query2);
    $stmt2->execute();

因为插入查询不会获取最后一个插入ID。所以将这些查询分开

答案 3 :(得分:0)

你必须使用

mysql_insert_id()

获取最后插入的记录的id

答案 4 :(得分:0)

见这里

INSERT INTO questions VALUES(NULL, 'My question');

INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 1');
INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 2');
INSERT INTO answers VALUES(NULL, LAST_INSERT_ID(), 'Answer 3');

现在我使用了LAST_INSERT_ID();

INSERT INTO answers VALUES
          (NULL, LAST_INSERT_ID(), 'Answer 1') , 
          (NULL, LAST_INSERT_ID(), 'Answer 2') , 
          (NULL, LAST_INSERT_ID(), 'Answer 3');

OR

我们也可以这样试试

INSERT INTO questions VALUES(NULL, 'My question');
SET @id = (SELECT LAST_INSERT_ID());
INSERT INTO answers VALUES(NULL, @id, 'Answer 1');
INSERT INTO answers VALUES(NULL, @id, 'Answer 2');
INSERT INTO answers VALUES(NULL, @id, 'Answer 3');

这只是你的一个例子

答案 5 :(得分:0)

$query1 = "INSERT INTO utilizador(email, pass, nome, dt_registo, tipo, activo) 
              VALUES (:email, '$hashed_password', nome, :dt_registo, :tipo, :activo);";
    $stmt = $pdo->prepare($query1);
    $stmt->execute();
    $insertedid = $pdo->lastInsertId("utilizador");

     $query2 ="INSERT INTO aluno(morada, cd_postal, cidade, utilizador_id) 

参考链接: - http://www.dreamincode.net/forums/topic/169597-pdolastinsertid/

                        VALUES (:morada, :cpostal, :cidade,'$insertedid'
);";
    $stmt2 = $pdo->prepare($query2);
    $stmt2->execute();