php sql view probleme
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
array
aufruf
auszugeben code
beginn
besucher
code
date
datum
ergebnis
fehl
fehler
forum
ordern
schritt
spalten
statement
url
ursache
verwaltung
-
Hallo zusammen,
ich weiß gerade nicht mehr genau weiter, lokal auf xampp funktioniert dieser sql aber auf lima-city gibt es keine result:
$stmt = $this->prepare("SELECT year, `month`, `day`, `hour` ,count(`visitor`) as besucher FROM `view_besucher` GROUP BY hour,day , month order by `date` ");
Die Tabelle view_besucher ist auf xampp und lima als view angelegt. Wenn ich den SQL auf lima in phpmyadmin ausführe bekomme ich einträge geliefert, wird er per php ausgeführt bekomme ich keine einträge geliefert.
Hat einer von euch eine lösung ?
Viele Grüße
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
"year" ist ebenso wie "month", "day" und "hour" ein reservierte Begriff. Muss also in Backticks und noch besser: Vermieden werden.
Wenn du die PDO-Fehlermeldungen anschaltest gibt es dir die Info dazu auch aus.
Evtl. maskiert PMA da selbst.
Dass das lokal bei XAMPP tut ist allerdings wirr. Sicher dass es da keine Unterschiede in den Queries gibt? -
Die Abfragen sind gleich und die views auch.
Habe die Spalten jetzt umbennant, aber es geht immer noch nicht.
SELECT `visitor_year`, `visitor_month`, `visitor_day`, `visitor_hour` ,count(`visitor_ip`) as besucher FROM `view_besucher` GROUP BY `visitor_hour`,`visitor_day` , `visitor_month` order by `visitor_date`
in phpmyadmin bekomme ich Werte zurück und lokal bei XAMPP klappt es auch
Beitrag zuletzt geändert: 21.4.2017 8:57:01 von lastminuteracing -
Dann wie oben gesagt: Fehlermeldungen anschalten. ;)
-
Die sind angeschaltet und es kommen keine Fehler. Funktioniert ja auch genauso wie es ist lokal
-
Ja alles eingeschaltet. Kann mir das Problem nicht erklären
-
Irgendwo muss die Ursache ja liegen.
Kannst du vielleicht etwas mehr Code posten? (Wo man auch die Fehlerbehandlung sieht)
Was genau bekommst du auf Lima-City als Ergebnis? Bedeutet "kein Result", dass du nachweislich ein leeres Ergebnis bekommst oder schlug die Abfrage fehl?
Kannst du vielleicht noch einmal sicherstellen, dass die Daten in der DB von Lima-City vorhanden sind. (Auch wenn du schon sagtest, dass PhpMyAdmin Ergebnisse liefert.) -
Hier ist der code der Abfrage:
public function getBesucher(){ $json = array(); $stmt = $this->prepare("SELECT `visitor_year`, `visitor_month`, `visitor_day`, `visitor_hour` ,count(`visitor_ip`) as besucher FROM `view_besucher` GROUP BY `visitor_hour`,`visitor_day` , `visitor_month` order by `visitor_date` "); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($year,$month,$day,$hour,$besucher); $counter =0; while ($stmt->fetch()) { $json[] = '[Date.UTC('.$year.','.$month.','.$day.','.$hour.'),'.$besucher.']'; } return $json; }
Ich bekomme nachweislich ein leeres ergebniss obwohl daten in der View vorhanden sind wie man hier im link Sieht:
lastminuteracing.lima-city.de/view_inhalt.png -
muellerlukas hat gleich zu Beginn von PDO gesprochen, obwohl du das nicht explizit erwähnt hattest. Ist das überhaupt richtig, dass du PDO einsetzt oder nutzt du Mysqli?
Bei Mysqli musst du prinzipiell jeden Schritt überprüfen, also die Rückgabewerte von prepare, execute, store_result und bind_result auswerten. Ansonsten entgehen dir womöglich Fehler. -
Ich nutze Mysqli. habe folgende meldungen eingebaut:
echo "FEHLER0".mysqli_error(); echo "FEHLER1".mysqli_error($stmt); echo "FEHLER2".mysqli_error($this->prepare); echo "FEHLER3".mysqli_error($stmt->execute()); echo "FEHLER4".mysqli_error($stmt->store_result()); echo "FEHLER5".mysqli_error($stmt->bind_result());
aber es wird bei keinem der 6 meldung ein Fehler erzeugt. -
Die Funktion mysqli_error() gibt dir eine Fehlerbeschreibung, direkt nachdem ein Fehler auftrat. Außerdem musst du das betreffende Mysqli-Objekt übergeben, das wäre in deinem Fall $this.
Ich versuche es einmal anders, lass mich die Methode getBesucher() um ein paar Debuggingausgaben ergänzen:
public function getBesucher(){ $json = array(); $stmt = $this->prepare("SELECT `visitor_year`, `visitor_month`, `visitor_day`, `visitor_hour` ,count(`visitor_ip`) as besucher FROM `view_besucher` GROUP BY `visitor_hour`,`visitor_day` , `visitor_month` order by `visitor_date` "); var_dump($stmt === false); var_dump($stmt->execute()); var_dump($stmt->store_result()); var_dump($stmt->bind_result($year,$month,$day,$hour,$besucher)); $counter =0; while ($fetch_return = $stmt->fetch()) { $json[] = '[Date.UTC('.$year.','.$month.','.$day.','.$hour.'),'.$besucher.']'; } var_dump($fetch_return); var_dump($json); return $json; }
Wenn du das ausführst, was wird dir dann ausgegeben? -
Demnach schlug der Aufruf von execute() fehl. Ich füge direkt danach noch eine Zeile ein, um die Fehlerursache auszugeben:
public function getBesucher(){ $json = array(); $stmt = $this->prepare("SELECT `visitor_year`, `visitor_month`, `visitor_day`, `visitor_hour` ,count(`visitor_ip`) as besucher FROM `view_besucher` GROUP BY `visitor_hour`,`visitor_day` , `visitor_month` order by `visitor_date` "); var_dump($stmt === false); var_dump($stmt->execute()); echo $this->error; var_dump($stmt->store_result()); var_dump($stmt->bind_result($year,$month,$day,$hour,$besucher)); $counter =0; while ($fetch_return = $stmt->fetch()) { $json[] = '[Date.UTC('.$year.','.$month.','.$day.','.$hour.'),'.$besucher.']'; } var_dump($fetch_return); var_dump($json); return $json; }
Was bekommst du dann als Ausgabe? -
Lösung beim fehler:
Prepared statement needs to be re-preparedbool
Link zum Mysql forum:
https://forums.mysql.com/read.php?98,643054,643287
Lokal kann man den table_definition_cache selber erhöhen. Hier bei Lima City ein Support Ticket öffnen und mitteilen das Sie den table_definition_cache erhöhen sollen.
Viele dank für eure hilfe :))
Beitrag zuletzt geändert: 25.4.2017 17:51:54 von lastminuteracing -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage