lastinsertId()和第二个查询插入问题

时间:2015-07-06 00:43:13

标签: php mysql ajax pdo

我现在已经挣了几个小时。我正在创建一个新的用户表单,我需要将数据插入到两个不同但连接的表中,但是我在这里发布的代码根本没有给出任何错误,实际上它是插入第一个查询( #query1)到数据库,但不是$query2

生成():

public function run($query, $params = []) {

        try {
            $this->error = null;
            $res = $this->db->prepare($query);
            $res->execute($params);
            return $res;
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
            return null;
        }
    }

registerNewUser():

function registerNewUser() {
        try{
            $query1 = "INSERT INTO utilizador(email, pass, dt_registo, tipo, activo) 
                          VALUES (?,?,?,?,?)";
            $res = $this->db->run($query1, [
                $this->email,
                $this->pw1,
                $this->dt_registo,
                $this->tipo,
                $this->activo
            ]);

            if(!empty($res)){
                $insertedid = $res->lastInsertId();
                $query2 ="INSERT INTO autor(nome, descricao, utilizador_id)
                            VALUES (?,?,?)";

                $res2 = $this->db->run($query2, [
                    $this->nome,
                    $this->desc,
                    $insertedid
                ]);
                if (!empty($res2)) {
                    echo 'sucesso';
                    return true;
                } else {
                    $this->errors[] = $res2->getError();
                    return false;
                }
            }else{
                // $this->errors[] = $res->getError();
                // return false;
            }               
        }
        catch(PDOException $exception){
            echo "Error: " . $exception->getMessage();
        }    
    }

更新

说我使用jquery ajax

也许很重要
$(document).on('submit', '#create-author-form', function() {
    $.post("parts/novo_autor.php", $(this).serialize())
        .done(function(data) {        
            $('#author-sucess').show();
        });
    return false;
});

P.S:假设数据一切正常,因为我之前已通过另一个验证功能。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的$ query2有四个问号参数,但您只绑定了三个值(nome,desc,insertedid)。

编辑: 在PDO查询中,问号参数是与值绑定的占位符。问号参数的数量必须与要绑定的值的数量相匹配,否则查询将失败,因为它需要更多的值。

由于您希望使用3个值,请尝试将$ query2更新为:

                $query2 ="INSERT INTO autor(nome, descricao, utilizador_id)
                        VALUES (?,?,?)";