lastInsertId返回0

时间:2020-04-15 02:01:02

标签: php pdo

实际上,有关此的文章很多。但是即使我检查了这些,仍然找不到问题。

DBC类

protected function connect(){

    $dns = "mysql:host=" . $this->server . ";dbname=" . $this->database;
    $pdo = new PDO($dns, $this->username, $this->password);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

    return $pdo;
}

并插入功能。

public function insert_row($created_at){
    $sql = "INSERT INTO empty_rows (created_at) VALUES (?)";
    $stmt = $this->connect()->prepare($sql);
    $stmt->execute([$created_at]);  
    $id = $this->connect()->lastInsertId();

    echo $id;
}

我认为它应该返回最后插入的ID,但是它仅返回0。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

@login_required(login_url=reverse_lazy('login')) def client_intake_req(request, pk=None, client=None): # First test to see if there is an existing model for client # If there is an existing form, populate and render it; otherwise create # a new one if pk: try: client = Client.objects.get(user_id=pk) # If the object exists: submitted = False if request.method == 'POST': form = ClientIntakeForm(request.POST, instance=client) if form.is_valid(): form.save() return HttpResponseRedirect('?submitted=True') else: form = ClientIntakeForm(instance=client) if 'submitted' in request.GET: submitted = True return render(request, 'client_intake.html',{'form': form, 'submitted': submitted}) except ObjectDoesNotExist: submitted = False if request.method == 'POST': form = ClientIntakeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('?submitted=True') else: form = ClientIntakeForm() if 'submitted' in request.GET: submitted = True return render(request, 'client_intake.html', {'form': form, 'submitted': submitted}) 返回在同一连接上插入的ID。每次呼叫$lastInsertId()都会获得一个新的连接。

您需要保存$this->connect()的结果,以便使用相同的连接。

$this-connect()

通常,如果您继续创建新的连接,则会大大降低应用程序的速度。我建议您更改public function insert_row($created_at){ $sql = "INSERT INTO empty_rows (created_at) VALUES (?)"; $connect = $this->connect(); $stmt = $connect->prepare($sql); $stmt->execute([$created_at]); $id = $connect->lastInsertId(); echo $id; } 方法,使其仅在第一次连接。

connect()
相关问题