PHP und SQL kann ich nicht miteinander verbinden

Alles, was PHP betrifft, kann hier besprochen werden.

PHP und SQL kann ich nicht miteinander verbinden

Postby Avarius » 07. July 2006 15:49

Hallo Leute,

ich bin ein waschechter Newby. Und hab dadurch natürlich auch mein erstes Problem.

Ich habe eine Datenbankabfrage geschrieben, die auch super funktioniert, zumindest wenn ich diese Abfrage direkt bei MySQL eingebe.

Dazu habe ich vier Tabellen in meiner Datenbank "projekt_proz" angelegt.
U.a. die Tabellen "Kennzahlen" und "Prozesse".

Jetzt noch der Code den ich geschrieben oder kopiert habe.
Hänge nämlich über nem dicke SQL- und PHP-Buch :( aber scheinbar umsonst

Code: Select all
<?php

$PROZ_NAME=($_GET['PROZ_NAME']);

$abfrage = "SELECT KENNZAHL from kennzahlen A where PROZ_NR = (SELECT PROZ_NR from prozesse where PROZ_NAME = $PROZ_NAME)";

$verbindung = mysql_connect("localhost","Avarius","flori");

if (!$verbindung) {
                echo "Keine Verbindung möglich!\n";
                exit;
   }
$result = mysql_db_query("projekt_proz",$abfrage, $verbindung);
   echo "<table border=1>";
   while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      echo "<tr><td>";
      echo implode("</td><td>",$row);
      echo "</td></tr>\n";
   }
   echo "</table>";
   echo "<P>Abfrage: <pre>$abfrage</pre>";

mysql_close($verbindung);

?>

die Fehlermeldung ist folgende:
mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

ich denke ja es liegt an meiner WHILE-Schleife, deren Inhalt ich schonmal gar nicht verstehe. Ich weiß auch, dass es andere Art und weisen gibt diese Schleife zu gestalten. In dieser Datei gehts:

Code: Select all
<?php
echo "Einkauf<br>\n";
$verbindung = mysql_connect("localhost","Avarius","flori");

if (!$verbindung) {
                echo "Keine Verbindung möglich!\n";
                exit;
   }

$i=0;

$abfrage = "SELECT PROZ_NAME from prozesse";

$erg = mysql_db_query("projekt_proz",$abfrage,$verbindung);

echo "<table border=0 cellpadding=0 cellspacing=0><tr>";
while (list($a_PROZ_NAME) = mysql_fetch_row($erg)) {
$i++;
if ($i <=5) {
                echo "<td width='180' height='48' background='prozess1.jpg'><div align=center><font size=3 align=middle valign=middle>", $a_PROZ_NAME, "</font></div></td>";
}
else {
                echo "</tr><tr><td width='180' height='48' background='prozess1.jpg'><div align=center><font size=3 align=middle valign=middle>", $a_PROZ_NAME,"</font></div></td>";      
$i = 0;
     }
}
       
echo "</tr></table>";
mysql_close($verbindung);

?>


Also, wenn mir da jemand helfen könnte und mir ggf. sogar die Unterschiede zwischen beiden Versionen sagen könnte und warums beim einen funzt und beim anderen nicht (ich weiß die Fragen werden immer mehr) dann wäre ich euch sehr verbunden. Wie gesagt ich bin kein Genie auf dem Gebiet, also sind mir einfache Erklärungen lieber :oops:
Naja, besten Dank vorab.
Gruß,
Matze
Avarius
 
Posts: 6
Joined: 07. July 2006 15:28

Postby Wiedmann » 07. July 2006 16:28

mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

Also schauen wir mal:
Code: Select all
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

"$result" enthält also keine MySQL result resource...

Diese sollte hier erzeugt werden:
Code: Select all
$result = mysql_db_query("projekt_proz",$abfrage, $verbindung);

Was wohl nicht klappt. Du überprüfst aber ja schon gar nciht ob das überhaupt funktioniert...:

Code: Select all
$result = mysql_db_query("projekt_proz",$abfrage, $verbindung) or die(mysql_error());


BTW soll man mysql_db_query() auch gar nicht mehr benutzen.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Avarius » 07. July 2006 20:02

Besten Dank für den Tipp.

Ich schaffs heute und morgen leider nicht zu testen, so dass ich leider wohl erst am Montag schauen kann was da schief läuft.

BTW soll man mysql_db_query() auch gar nicht mehr benutzen.

Was benutzt man denn heut zu Tage? Ich habe mir dieses Code-Stück von einer "Tutorial"-Seite kopiert, aber wie gesagt hatte keine Ahnung wie das funzt.

Naja, immerhin finde ich es super, dass es Leute gibt die versuchen einem irgendwie zu helfen. Von daher auch DANK an Dich und alle Hilfsbereiten.

:D :D :D
Avarius
 
Posts: 6
Joined: 07. July 2006 15:28

Postby Avarius » 10. July 2006 10:26

Also die Fehlermeldung die den Fehler beschreiben soll, sagt aus, dass es sich um einen Syntaxfehler handelt.
Code: Select all
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

Wenn ich das richtig verstehe, möchte er hier, dass ich irgendetwas mit oder bei dieser offenen Klammer zu überprüfen habe.
Ich denke hier scheint der Fehler anderswo in der Syntax zu liegen, aber als Anfänger bin ich mit diesen Syntaxen überhaupt nicht vertraut.
Ich hoffe mir kann geholfen werden. Werde natürlich selbst nochmal schauen. Danke vorab.

Grüße Matze
Avarius
 
Posts: 6
Joined: 07. July 2006 15:28

Postby Wiedmann » 10. July 2006 13:27

Was für einen MySQL - Server hast du?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Avarius » 10. July 2006 13:28

ich benutze derzeit WAMP5 v. 1.6.1
Avarius
 
Posts: 6
Joined: 07. July 2006 15:28

Postby Wiedmann » 10. July 2006 14:00

ich benutze derzeit WAMP5 v. 1.6.1

Gewagt, gewagt, hier eine Frage zu einem Konkurenzprodukt zu stellen. Und uns dann auch noch suchen zu lassen, welcher MySQL-Server da drin steckt... ,-)


Code: Select all
$PROZ_NAME=($_GET['PROZ_NAME']);
$abfrage = "SELECT KENNZAHL from kennzahlen A where PROZ_NR = (SELECT PROZ_NR from prozesse where PROZ_NAME = $PROZ_NAME)";

Du rufst das Script auf, ohne dass im GET-Request "PROZ_NAME" übergeben wird. Also bleibt folgendes Query übrig:
Code: Select all
$abfrage = "SELECT KENNZAHL from kennzahlen A where PROZ_NR = (SELECT PROZ_NR from prozesse where PROZ_NAME = )";

Dieses prodiziert dann den Fehler weil der Wert von "PROZ_NAME" fehlt:
PROZ_NAME = foo

BTW:
Da "PROZ_NAME" wohl eine VARCHAR-Spalte ist (?), gehört "foo" in Singlequotes:
PROZ_NAME = 'foo'
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Avarius » 11. July 2006 08:56

Gewagt, gewagt, hier eine Frage zu einem Konkurenzprodukt zu stellen. Und uns dann auch noch suchen zu lassen,

welcher MySQL-Server da drin steckt... ,-)

:oops: :oops:
Was soll ich dazu sagen...
Sorrrryyyyy..... :?
Das ist mir ziemlich unbeabsichtigt passiert, scheinbar.
Hab einfach nur nach 'nem fähigen Forum gesucht. Wusste nicht mal dass es Konkurrenzen gibt.

Mein Problem hat sich derweil verändert. Ich habe mal statt der Variablen $Proz_name einen plausiblen Wert eingegeben.
Dabei weiß ich jetzt was der Fehler war, ichdenke, wenn ich Dich richtig verstanden habe, dann so wie du gesagt hast.
hier falsch:
Code: Select all
(SELECT PROZ_NR from prozesse where PROZ_NAME = $PROZ_NAME)";

hier richtig:
Code: Select all
(SELECT PROZ_NR from prozesse where PROZ_NAME ='".$PROZ_NAME."')";


Trotzdem gibt er mir folgendes aus:
Code: Select all
Array

Stattdessen soll er mir die Zeile Kennzahl auslesen in der bis zu 255 char stehen können.
Die Datenbank ist wie folgt aufgebaut.

Tabelle Prozesse hat Proz_name, Proz_Nr
Proz_Nr -> Primärschlüssel
Tabelle kennzahlen hat Kennzahl_id, Kennzahl und Proz_Nr
Kennzahl_id -> Primärschlüssel


Auf diese Weise kann man für einen Prozess mehrere Kennzahlen anlegen, wenn ich mich nicht irre.

Wieder bin ich mir nicht sicher, aber ich glaube einerseits der Fehler müsste hier drin stecken. Dass der Befehl nicht zur DB-Struktur passt oder so.


Code: Select all
 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      echo $row;

Interessanter Weise wird der String "Array" wie er im Ergebnis erscheint gar nicht in die Tabelle geschrieben. Aber ich kann mir überhaupt nicht vorstellen, wo der Fehler zuvor liegen sollte.

BTW: Nichts für ungut, wenn es nicht gut fürs Forum ist, dann kann ich ja die Einträge nochmal nachträglich editieren oder ggf das Forum wechseln, war halt keine Absicht und suchen lassen wollte ich Dich auch nicht.
Auf persisch würde man sagen "Bebachshid" also Entschuldigung. :oops: [/quote]
Avarius
 
Posts: 6
Joined: 07. July 2006 15:28

Postby Avarius » 11. July 2006 10:08

ok, hab die Antwort auf meine Frage schon herausgefunden.

$row in diesem Falle "muss" oder wenigstens kann mittels implode ausgegeben werden. Dadurch sieht meine Funktion wie folgt aus:
Code: Select all
  while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
   
      echo implode("</td>", $row);
      echo "</td></tr>\n<tr><td>";
   }

Der ausgegebene HTML-Code ist überhaupt nicht "sauber" aber das Prinzip funktioniert.
Um den HTML-Code ordentlich generieren zu lassen brauch ich aber erst mal noch eine kleine Weile und einen Kaffee ;)
Aber besten Dank. Ich denke meine Fragen sind bis hier erstmal beantwortet.

Beste Grüße an ALLE,
Matze
Avarius
 
Posts: 6
Joined: 07. July 2006 15:28


Return to PHP

Who is online

Users browsing this forum: No registered users and 5 guests