WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Problem: Mehrfach-Ouery mit php an mysql senden. mysql 3.23, php 4.2.1 » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
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.

Nach oben