实际上,有关此的文章很多。但是即使我检查了这些,仍然找不到问题。
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。我在这里缺少什么?
答案 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()