phpbar.de logo

Mailinglisten-Archive

[php] mysqli prepare

[php] mysqli prepare

mhe mhe at ltcgroup.de
Fre Feb 18 15:38:34 CET 2005


Am Fri, 18 Feb 2005 05:29:37 +0100 schrieb Lutz Zetzsche <Lutz.Zetzsche at sea-rescue.de>:

>> $insert = $db->prepeare();
>>
>> ->> $insert = false
>
> Hast Du Dich da nur in der Mail oder direkt im Quelltext
> verschrieben? ;-)  Auch wenn Du vielleicht gerade an PEAR gedacht hast,
> muß es ja auch so heißen:
>
> 	$insert = $db->prepare();
>
> Um die Zeit sollte man ja auch eben im Bett sein und nicht mehr
> programmieren. ;-)))

prepare ist schon richtig, habs schnell getippert, neues keyboard,
theoretisch wuerde da ja wen es so wie ich in der mail
geschrieben habe ein "method not found" kommen, aber im source
ist es richtig geschrieben ..

sehr seltsam das ganze ..

ich schreibs nochmal in pseudo php code
er erste teil :
--

$db = new MySQLi( [..] );

$query = "select bla from tt";
$select = $db->prepare($query);
$select->execute();
$select->bind_result($bla);

while($select->execute())
{
	echo $bla . "\n";
}

--

das ganze funktioniert einwandfrei

`jetzt dacht ich mir, habsch nen db objekt
mit ner validen connection, und ein select
statement objekt. mach ich mir nochmal
ein prepare fuer ein gleiches insert,

--

$db = new MySQLi( [..] );

$query = "select bla from tt";
$select = $db->prepare($query);
$select->execute();
$select->bind_result($bla);

$query = "insert into tt2 (bla) values(?)";
$insert = $db->prepare($query);
$insert->bind_param("s", $bla); // method not found

while($select->execute())
{
	$insert->execute();
}

--

so, bahm .. funzt nicht .. prepare liefert FALSE,
und kein statement objekt beim 2ten prepare,

was aber funzt ist folgendes

--

$db = new MySQLi( [..] );
$db2 = new MySQLi( [..] );

$query = "select bla from tt";
$select = $db->prepare($query);
$select->execute();
$select->bind_result($bla);

$query = "insert into tt2 (bla) values(?)";
$insert = $db2->prepare($query);
$insert->bind_param("s", $bla); // und funzt auf einmal ?

while($select->execute())
{
	$insert->execute();
}

--

man beim statement objekt close() aufrufen, und dannach
kann man ein neues prepare innerhalb der db instanz aufrufen.

ich hab das ganze mal weiterverfolgt, wen man sich mittels
prepare ein statement objekt holt, wird intern mittels
stmt_init ein neues objekt erzeugt. intern geht der client
via protokoll zum server und registriert dort unter einer
ID ein neues prepared statement. beim naehsten aufruf
dann schickt bei execute der client die ID und die parameter
zum server. scheinbar gibt es intern im mysqli probleme
mit dem handling mehrerer IDs von prepared statements.

richtig kann man mit $db->stmt_init() arbeiten, man erhaelt
ein statement objekt, welches aber intern nicht so richtig
funktioniert .. die methoden der zweiten statement instanz
scheinen bei bind_param auf die der ersten zu verweisen ..

ist aber auch egal ..

ciao
  Mathias



-- 
      __________________________________________
     /
    /   http://www.phpn.org
   /  /   http://www.ltcgroup.de
  /  /  /  ____________________________
   _/ _/ _/

php::bar PHP Wiki   -   Listenarchive