[PHP/MySQL] mysql_insert_id(); + lock_table ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

[PHP/MySQL] mysql_insert_id(); + lock_table ?

Beitrag von finupsen » 29.08.2006 13:51:19

Hallo,

Folgendes:

- ich mache ein "INSERT"
- ich beziehe die lastinsertid via "mysql_insert_id()"
- ich benutze diese für ein datei-prefix

Was aber, wenn eine anderer thread zwischen "INSERT" und getLastInsertID"
ebenfalls ein "INSERT" ausführt (Stichwort: thread-safe) , bzw. wie geht php
damit um, oder wie muss ich damit umgehen ?
ist hier ein lock_table sinnvoll ?
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 29.08.2006 14:08:46

Hm, nach der MySQL-Doku
The value of mysql_insert_id() is affected only by statements issued within the current client connection. It is not affected by statements issued by other clients.
sollte kein extra Table-Lock noetig sein.
Naeheres findest du hier: http://www.mysql.org/doc/refman/4.1/en/ ... rt-id.html

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 29.08.2006 15:07:05

also ist es so, daß ich persistente verbindungen habe ?

hier mal ein ausschnitt:

Code: Alles auswählen

require 'config.inc.php';

function _connectDB() {
	global  
      $MYSQL_HOST,
		$MYSQL_USER,
		$MYSQL_PWD,
		$MYSQL_DB,
		$db_connection;
	
	$db_connection = mysql_connect(
		$MYSQL_HOST,
		$MYSQL_USER,
		$MYSQL_PWD) 
			or die("MYSQL-Error:".mysql_error());

	mysql_select_db($MYSQL_DB) 
		or die("MYSQL-Error: select db");
}

_connectDB();

function _doSimpleQuery($query) {
   return mysql_query($query) 
      or die(mysql_error());
}
Ich denke nicht, oder ? Es wird ja bei jedem include ein db_connect aufgerufen.
Wie kann ich denn eine verbindung bei "session.isNew = true" aufbauen
und wie kann ich diese verbindung an die session binden ?
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 29.08.2006 15:39:22

Hm, wenn du die einmal geoeffnete Verbindung zugemacht hast, dann bringt dir mysql_insert_id() eh nix mehr. Du musst diese Funktion direkt nach einem INSERT aufrufen.

Wenn du eine persistente Datenbankverbindung willst, dann musst du mysql_pconnect() benutzen. Siehe auch http://de2.php.net/manual/de/features.p ... ctions.php

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 29.08.2006 16:11:03

ah, pconnect() ... ganz schön umfangreich das ganze ;)

danke nochmal ...
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Antworten