von subjective |
mysql_free_result() macht Sinn, wenn du ein gültiges Ergebnis hast und außerdem danach noch weiteren PHP-Quellcode ausführst. Am Ende der Scriptausführung räumt PHP selbst auf.
|
von elster |
mmh - Danke! Auch für die Kommentare!
zwei Fragen (Fehler) habe ich noch:
1. Das 7-teilige query-Beispiel ist ja aus:
http://www.mysql.com/.../example-Maximum-column-group-row.html
In MySQL-Front: die ersten 5 durchgespielt erzeugt die tmp-Tabelle
und mit query 6-7 entferne ich sie danach wieder.?
Wenn ich die beiden Schritte (wie unten) mit php mache,
gibts ein:
>> Tabelle 'tmp' bereits vorhanden.
Woher kommt das?
2. Ist das mysql_free_result unten notwendig? Wie sollte ein Abschluß aussehen?
>> Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in
Grüße, Jörg
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22: |
$sql2 = " ... ";
$release = "3.23.39";
PMA_splitSqlFile(&$ret, $sql2, $release);
while (list(, $value) = each ($ret))
foreach ($ret as $value) {
$result = mysql_query($value) or die("<br>no query: ".mysql_error()); }
if(!$result) echo "--- nix SELECT ---<br>" or "<br> ++nix SELECT ".mysql_error();
$print2 = mysql_fetch_array($result);
echo "<b>sql-> </b>: ".$print2[0]." - ".$print2[1]." - ".$print2[2]."<br>";
$sqlfin = "UNLOCK TABLES;
DROP TABLE tmp";
PMA_splitSqlFile(&$ret, $sqlfin, $release);
while (list(, $value) = each ($ret))
foreach ($ret as $value) {
$result = mysql_query($value) or die("<br>no DROP: ".mysql_error()); }
if(!$result) echo "--- nix DROP ---<br>";
mysql_free_result($result);
mysql_close($link);
|
|
von subjective |
$result .= mysql_query() kann nicht funktionieren. Die Rückgabe von mysql_query() ist immer eine Resoure-ID, also der Identifier für ein Ergebnis im Speicher. Der Operator .= ist ein String-Append. Die Ids werden als Strings zusammengefügt. Die Variable enthält also am Ende keine Resource-ID, sondern einen String.
Du solltest mit einer Schleife über das Array $ret gehen und nacheinander die einzelnen SQL-Queries ausführen. Damit mußt du Fehlerbehandlung und Ausgabe auch nur einmal schreiben. |
von elster |
Hi subjective,
Super! Stimmt. Danke!
es klappt aber noch nicht ganz. Jetzt:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in
aus dem Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16: | PMA_splitSqlFile(&$ret, $sql, $release);
$result = mysql_query($ret[0]);
$result .= mysql_query($ret[1]);
$result .= mysql_query($ret[2])or die($ret[0]."<br>".$ret[2]."<br>"
.$ret[3]."<br><br> ".$sql.'<br>'.mysql_error());
if(!$result) echo "--- nix ---";
while($print2 = mysql_fetch_row($result)) {
echo "<b>q3-> </b>: ".$print2[0]."<br>"; }
echo "</font>\n";
$sqlfin = "UNLOCK TABLES;
DROP TABLE tmp";
PMA_splitSqlFile(&$ret, $sqlfin, $release);
mysql_query($ret[0]);
mysql_query($ret[1]) or die("<br> ++ ".mysql_error());
mysql_free_result($result);
mysql_close($link); |
bei den abschließenden letzten beiden querys bin ich mir unsicher, da ich
nicht weiß, wie ich sie zusammenhängend auszeichnen soll ...
ebenso subjektive Grüße,
Jörg
(jetzt hab ichs mit dem Code/BB-Tags endlich geschnallt - hoffentlich ...) |
von subjective |
Du kannst mit Sicherheit die Rückgabe von PMA_splitSqlFile() nicht in mysql_query() verwenden. Ich vermute da kommt nur true/false oder halt die Anzahl. $ret ist sicher eine Variable die nach der Funktion ein Array mit den SQL-Anweisungen enthält.
Das & wird übrigens eigentlich nur in der Deklaration - nicht im Aufruf verwendet. |
|