Mehrere Befehle in ein abruf bei Datenbank

  • Ich habe das jetzt so

    Einamal um vorhandene Einträge zu suchen

    Code
    1. $mysqli = mysqli_connect('localhost', 'sebastian1012', 'basti1012', 'NACRUI');
    2. if (mysqli_connect_errno())
    3. die ("Connect failed: " . mysqli_connect_error());
    4. mysqli_set_charset($mysqli, "utf8");
    5. $query = "Select
    6. `id`,
    7. `seite`, `datum`, `browser`, `ip`,`reffer`, `hostname`, `land`, `stadt`, `bland`
    8. FROM `besucher` WHERE seite LIKE '%$suchwort%'";
    9. usw.

    und einmal damit ich die Menge der gefundene Einträge habe

    Code
    1. $pdo = new PDO('mysql:host=localhost;dbname=sebastian1012', 'sebastian1012', 'nacrui');
    2. $statement = $pdo->prepare("SELECT COUNT(*) FROM `besucher` WHERE `seite` LIKE '%$suchwort%' ORDER BY `id` LIMIT 0,1000");
    3. $statement->execute();
    4. $row = $statement->fetch();
    5. echo $row[0] . '<br />';

    Erstens sind es zwei verschiedene Methoden und zweiens geht das doch bestimmt in einer anfrage oder nicht ?

    Die zweite könnte ich ja weg lassen und die gefundene Einträge mittels Php oder js Zählen,aber ich meine wenn die Datenbank das ja kann ,dann soll die mir das doch anzeigen.Oder geht mein Vorhaben nicht wie ich mir das Vorstelle?


    Ich habe keine Fehler oder so ,Code läuft ,aber ein sehr beschi...Lösung so ,das muß anders sein.

  • Du solltest dich für einen Weg entscheiden, nicht mal MySQLi und dann PDO.

    Das hatte ich vor.Hatte aber nicht beides unter ein Hut bekommen.Irgendwie hatte ich immer den Wurm drinne.

    Macht sich schlecht.

    Wenn DU mehrere Zeilen zurückbekommst, dann hättest Du ja in jeder Zeile die Anzahl.

    Ne das hatte ich zum Glück nicht ,weil die Anzahl abfrage erst kommt wenn die erste fertig ist.


    Ich hatte eigentlich gedacht alles in einer Abfrage zu machen zb so

    Code
    1. $mysqli = mysqli_connect('localhost', 'sebastian1012', 'basti1012', 'NACRUI');
    2. if (mysqli_connect_errno())
    3. die ("Connect failed: " . mysqli_connect_error());
    4. mysqli_set_charset($mysqli, "utf8");
    5. $query = "Select
    6. `id`,
    7. `seite`, `datum`, `browser`, `ip`,`reffer`, `hostname`, `land`, `stadt`, `bland`
    8. FROM `besucher` WHERE seite LIKE '%$suchwort%',
    9. COUNT(*) FROM `besucher` WHERE `seite` LIKE '%$suchwort%' ORDER BY `id` LIMIT 0,1000";

    Gut so wirds nicht gehen weil schon versucht.Aber das soll eigentlich nur zeigen wie ich es meine.Gibt es so nee Kombi abfrage?

    Habe zwar so nee Kombi abfrage gefunden wo einer mehrere Suchwörter hatte ,aber nix wo verschiedene sachen drinne sind wie hier

  • PHP
    1. $row_cnt = mysqli_num_rows($result);

    > http://php.net/manual/de/mysql…-result.num-rows-examples

    Das ding hat mich zwar erst paar mal vera....aber jetzt läuft es .Besten Dank

    Habe jetzt auch alles in eins wie es sein sollte

    Oder ist da noch was verbesserungs würdig?

  • Eine while-Schleife, die nichts tut und 2 x mysqli_num_rows


    Und wo kommt $suchwort her?

    Ha habe ich gar nicht drauf geachtet.Das muß ich ändern.

    Das $suchwort kann über <input> geändert werden,es soll eine Datenbanksuche werden die mein ganzen Server durchsucht.Das klappt auch soweit.

    Nur frage ich mich wie weit man in der Datenbank speichern kann.

    zb

    Wenn ich jetzt in der suche hallo eingebe durchsucht er den link und so weiter. Ich wollte eigentlich das er dann auch noch den quelltext durchsucht nach "hallo".

    Dazu müsste ich den ganzen Quelltext in der Datenbank speichern.RICHTIG ??.

    Nur da ist meine frage.Kann man von sämtlichen Seiten den ganzen Quelltext in Datenbank speichern.das sind über 400.000 Zeilen.

    Könnte wohl zu viel des guten sein oder ??


    Zur INFO: habe mit ein Php Script über dir() mein Server ausgelesen und Link Pfad auf Server gespeichert.Noch ohne quelltext

  • PLatzhalter (mysqli) ? statt $var! (sql injection)


    Was für ein Quelltext? Was für ein Link?

    Du suchst doch im Bsp WHERE seite LIKE ?

    also wo das gesuchte Wort in der Spalte `seite` vorkommt.


    Wenn Du noch in zusätzlichen Spalten suchen willst (zB `link`)

    dann brauchst Du ein or

    SQL
    1. SELECT
    2. `id`, `seite`, `datum`, `prov`, `suche`,`wann`, `von`, `gestern`, `Zukunft`, `update`
    3. FROM `besucher`
    4. WHERE
    5. `seite` LIKE ?
    6. OR `link` LIKE ?
    7. ;
  • Das php script hat auf den Server wom eine Page ist alle Links (html,css,js) Datein mit Name und Pfad in der Datenbank eingelesen.

    Jetzt habe ich da ca 800 Einträge die so aussehen


    10.12.2018 - sebastian1012.bplaced.net/index.html/ - /index/


    Jetzt möchte ich nee Spalte haben wo der gesamte Quelltext der einselne Seiten mit drinne steht.

    So das der User ein Suchwort eingibt und im ganzen Quelltext suchen kann.

    Gut Quelltext vieleicht nicht ,aber zumindest das was man auf der Page sehen kann.


    Meine Frage ist kann man mehrere 1000 Zeichen ( Quelltext einer html Seite ) in ein Eintrag speichern?

    Wenn ja ,kann die Datenbank das auch verarbeiten wenn ein User nach den Wort "hallo" sucht??

    Die Datenbank müsste ja 800 Einträge durchsuchen wo im jeden Eintrag mehrere 1000 Zeichen stehen??


    Der neue Suchort soll nicht mehr Seite sein sondern dann Seite und Quelletxt:

    Aber das geht ja ,das hast du ja gerade geschrieben

  • Der Datenbankserver wird bei deiner Abfrage noch nicht mal richtig warm, 800 Datensätze sind doch nichts.


    Du solltest dich aber mal im Netz schlau machen, wie man eine Suche durch Seiten richtig macht. Alle Seiten in eine DB zu stopfen ist bestimmt nicht der richtige Weg.

  • Also ich habe bis jetzt das gefunden.

    Einmal erstellt man selbereine extra Spalte und schreibt selber suchwörter rein ,die zur dieser Seite passen könnte.

    Wenn ich jetzt diese Seite hätte könnte ich als suchwörter (Programieren ,css,js,javascript,php,server,sql,html,html4,xml,txt) und so weiter reinschreiben.

    Wäre eime menge arbeit.

    Dann habe ich was gefunden ,das man die Metadatein als Suchwörter nehmen kann.Das könnte man mit Php ja auch auslesen und in Datenbank schreiben,was wenniger arbeit wäre.Fällt bei mir erstmal weg,weil nur meine Startseite eine volle Metadatei hat,alle anderen Seiten haben nur <link><script>utf8 und das wars.Also alle nicht ausgefüllt.

    Da meine Seitennicht alzu viel Text beinhalten,hätte ich mirgedacht das man nur den Teil den man sieht ,in der Datenbank speichert.Also so wie die h1-6 <span> <p> <li> Elemente Scanne und in Datenbank Speichere. Das wäre nicht ganz so viel und man könnte es mit einen Script Regeln.Den ganzen Quelltext der sonst auf einer Seite ist ,ist ja uninteresant.

    Ich werde mal weiter suchen ,vieleicht gibt es da noch was anderes.

    Wie macht das den Zb Ebay??? Wenn man da einen neu Auktion erstellt ,kann man die ja auch sofort in der Suche finden.


    Andere Frage.Kann man beim Sql auch nee Abfrage machen wie lange die Suche gedauert hat??

    Ich habe das schon mal öfters gesehen das unter der Suche stand "Die Suche dauerte 0,548754 Sekunden".?

  • Eine simple Zeitmessung habe ich dir schon gezeigt :(


    Siehe array wort liste

    Das stimmt,das weiß ich ja.Aber dachte das es bei sql vieleicht was gibt ,oder ein Wert mit sendet.Wenn man bei phpadmin rein geht und irgend was in der Tabelle aufruft,steht da ja auch wie lange es gedauert hat das anzuzeigen.

    Aber ich habe bei goggle auch nix gefunden ,das sql sowas anbietet.

    Also bleibt nur php übrig.

    Habe aber beim goggeln was interesantes gefunden,das man sql auch als Datums rechner verwenden kann.

    Ohne viel Code schreibt man eine Zeile datum+1000 Stunden und es kommt das Datum raus. Ist eine interesante Sache

  • kann mir mal einer sagen was hier dran falsch ist.

    Code
    1. $statement = $pdo->prepare("UPDATE besucher SET zahler = REPLACE('zahler', '.'$zahlalt.', '.$zahlneu.'");

    Soll für den besucherzähler sein.Erst lese ich den Wert aus und dann will ich den hier ändern.

    Es passiert nix.Auch kein Fehlercode.

    Wahrscheinlich ist es wieder umständlich was ich mache.Aber ich muß erst den Seitennamen aus DB auslesen mit den Besucherzahlen und ip.

    Dann wird entschieden ob gezählt werden darf oder nicht .

    Deswegen kommt das ändern erst weiter unten,und zwar mit den Code hier der nicht geht.

    Habe mitlerweile 20 verschiedene Varianten aus google ausprobiert, aber nix hat geklappt bis jetzt .Was mache ich wieder falsch??????:cursing:

  • Keine Ahnung was Du vor hast. Aber wieder Vars in der Query. (sql injection)


    REPLACE ersetzt doch in "zahler" den Wert $zahlalt (wenn gefunden) mit $zahlneu.

    Das ergibt für mich keinen Sinn. Da sollte doch sicherlich eine Zahl drin stehen?

  • Soll für den besucherzähler sein.

    Mal sind wir bei einer Suchfunktion, dann wieder bei einem Besucherzähler und bestimmt sind wir bald bei dem Gästebuch und alles in einem Thread!


    Und mal nutzt du MySQLi, dann wieder PDO, aber nichts davon richtig. Bleib' doch endlich mal bei einer Sache und wechsele nicht ständig die Vorgehensweise. Das macht dich doch nur noch strubbeliger.

  • Mal sind wir bei einer Suchfunktion, dann wieder bei einem Besucherzähler und bestimmt sind wir bald bei dem Gästebuch und alles in einem Thread!


    Und mal nutzt du MySQLi, dann wieder PDO, aber nichts davon richtig. Bleib' doch endlich mal bei einer Sache und wechsele nicht ständig die Vorgehensweise. Das macht dich doch nur noch strubbeliger.

    Ja bin bei beiden dabei ,Morgens das Abends das,und Nachts Forums:).Gb macht pause weil ich mich da erst in den Session Zeug reinlesen muß ,das checke ich noch nicht so,weil wollte noch nee Admin Seite dafür machen.

    Aber falsches Thema.

    Ja strubelig bin ich genug.Das mit mysqli und PDO liegt daran das ich mal nur eins von beiden im Netz finde was funktioniert. Ich wollte eigentlich bei mysqli bleiben.Habe aber eben nur den PDO Code gefunden und habe den dann probiert.Aber der geht ja auch nicht.


    Ich finde das schade das bei sqll so viele verschiedene Sachen finde im Netz.Will nur eine Zahl ändern aber man findet dann nur wie man ganze Zeile ändert(das will ich nicht). Oder wie man einen Wert direkt tauscht ,ohne zu bearbeiten( das will ich auch nicht weil der Wert ja steigen muß ).


    Und das Netz ist noch reichlich mit den alten sql voll,den will ich ja ganz meiden,soweit ich es erkenne das es alt ist .

  • Keine Ahnung was Du vor hast. Aber wieder Vars in der Query. (sql injection)


    REPLACE ersetzt doch in "zahler" den Wert $zahlalt (wenn gefunden) mit $zahlneu.

    Das ergibt für mich keinen Sinn. Da sollte doch sicherlich eine Zahl drin stehen?

    zahl alt ist zb ein 12 und Zahlneu soll dann 13 werden. Ich durchsuche vorher die DB nach einen Link.Der Link hat ne spalte mit besucherzahlen.Und mit diesen Script soll die Zahl immer ein höher gezählt werden.Muß aber vorher schon die DB durchsuchen um mit der Zahl zu arbeiten.Später im Code ,also jetzt sollen die Zahlen dann getauscht werden. Könnte auch den ganzen Eintrag Löschen und neu schreiben.Aber ich will ja alles lernen und nicht nur Pfuschen.


    Was meinst du mit Aber wieder Vars in der Query. (sql injection)

    wie was muß ich ändern und warum?