首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多查询& LastInsertId

多查询& LastInsertId
EN

Stack Overflow用户
提问于 2015-06-19 04:41:24
回答 6查看 310关注 0票数 0

这个问题有多大错?我可以插入这样的多个查询吗?我可以那样使用lastInsertId吗?

代码语言:javascript
复制
$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

代码语言: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;
});
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-06-19 16:53:01

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

  • 您使用准备语句,但仍将值放入查询字符串中。
  • hashed_password在第一个查询中未定义。
  • 您尝试同时绑定多个查询。
  • 错误的顺序准备第一个查询,执行,然后绑定参数-$pdo->lastInsertId();就不确定为什么要传递"utilizador"

试试这种方法:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-06-19 04:45:34

我想这些对你有帮助。

代码语言:javascript
复制
 $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);

这些会对你有用的。

代码语言:javascript
复制
 mysql_select_db('test');
 mysql_query("INSERT INTO mytable (name) values ('venkatesh')");
 printf("Last inserted record has id %d\n", mysql_insert_id());

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2015-06-19 04:53:32

试试这个..。

代码语言:javascript
复制
$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。所以把这些查询分开

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30930017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档