Antworten auf deine Fragen:
Neues Thema erstellen

PHP und MSQLI Problem Prepare Methode

Blackson1c

Noch nicht viel geschrieben

Hi Jungs und Mädels
Ich brauch mal wider Hilfe, und zwar hab ich ein Problem bei dieser Suchanfrage an die DB

PHP:
function suchen () {
include('db_zugang.php');

$query = "SELECT DISTINCT n.ID AS ID, n.Code AS Nr, n.Titel AS Titel, n.Anwendungsbereich AS Anwendungsbereich,k.Name AS Kategorie,s.Name AS Status, n.Datum AS Datum, p.Name AS Projekt, n.Vorschlaege AS Kommentar, n.Editor AS Editor ";
    $query.= "FROM normen n, kategorie k, status s, land l, projekt p WHERE 1 ";
    $query.= "AND k.ID = n.Kategorie_ID "; // Join fuer Kategorie
    $query.= "AND s.ID = n.Status_ID "; // Join fuer Status
    $query.= "AND l.ID = n.Land_ID "; // Join fuer Land
    $query.= "AND p.ID = n.Projekt_ID "; //Join fuer Projekt
    $query.= " LIMIT 0 , 200 ";


 // Statement vorbereiten
    $ergebnis = $db->prepare( $query );
    // an die DB schicken
    $ergebnis->execute();
    // Ergebnis an Variablen binden
    $ergebnis->bind_result( $ID, $Code, $Titel, $Anwendungsbereich,$Kategorie,$Status,$Datum, $Projekt, $Kommentar, $Editor );


    // Ergebnisse ausgeben
    
    echo $ergebnis->num_rows;
    while ($ergebnis->fetch())
    {
        echo '<tr>';
        echo  '<td>'.$Code .' </td>'.'<td>'.$Titel .' </td>'.'<td>'.$Anwendungsbereich .' </td>';
        echo  '<td>'.$Kategorie .' </td>'.'<td>'.$Status .' </td>'.'<td>'.$Datum .' </td>';
        echo  '<td>'.$Kommentar .' </td>'.'<td>'. $Editor.' </td>';
        echo '</tr>';
        
        
    }
    
    
                                        
//$db->close();

 


 
}
Diese Anfrage funktioniert nur solange wie ich das
PHP:
$query.= " LIMIT 0 , 200 ";
benutze, sobald ich die Werte über 200 stelle, oder es komlet weglase bekomme ich Probleme mit den Browsern.

Der FF sagt mir dann nach 30sec das die Verbindung zu Server zurück gesetzt wurde. Und der IE8 ungefair das selbe.
Dann ist noch die $ID ab den 100 Wert immer 101.

Wie Löst man dieses Problem oder umgeht das
Bin für Tips und Verbesserungs Vorschläge dankbar.
 
Zuletzt bearbeitet:

AW: PHP und MSQLI Problem Prepare Methode


$query = "SELECT DISTINCT ........


Diese Anfrage funktioniert nur solange wie ich das
PHP:
$query.= " LIMIT 0 , 200 ";
benutze, sobald ich die Werte über 200 stelle, oder es komlet weglase bekomme ich Probleme mit den Browsern.
Der FF sagt mir dann nach 30sec das die Verbindung zu Server zurück gesetzt wurde. Und der IE8 ungefair das selbe.
.
Ja, dir schon mal sorgen um dein SQL Server + Webserver ge gemacht?
Ich kenn die Performance von PHP und MySql nicht. Ich arbeite mit MSWeb und MSSQL.
Du schießt hier mit einer Flag auf eine Mücke.
Was willst Du mit der Abfrage überhaupt bezwecken?

Gruß Scharny
 
Zuletzt bearbeitet:
AW: PHP und MSQLI Problem Prepare Methode

Ja, dir schon mal sorgen um dein SQL Server + Webserver ge gemacht?
Ich kenn die Performance von PHP und MySql nicht. Ich arbeite mit MSWeb und MSSQL.
Du schießt hier mit einer Flag auf eine Mücke.
Was willst Du mit der Abfrage überhaupt bezwecken?

Gruß Scharny

Das sollte alle Werte halt ausgeben die durch ein Suchformular ausgewählt worden sind. Die obere Version war eine Test version für den Fall das alles ausgegeben wird, und das hier unten ist schon mit dem zusätzlichen parametern

Das wäre dann die erweiterung der SQL abfrage:
PHP:
function suchen ($chosenForm) {
include('db_zugang.php');

$query = "SELECT DISTINCT n.ID AS ID, n.Code AS Nr, n.Titel AS Titel, n.Anwendungsbereich AS Anwendungsbereich,k.Name AS Kategorie,s.Name AS Status, n.Datum AS Datum, p.Name AS Projekt, n.Vorschlaege AS Kommentar, n.Editor AS Editor ";
    $query.= "FROM normen n, kategorie k, status s, land l, projekt p WHERE 1 ";
    $query.= "AND k.ID = n.Kategorie_ID "; // Join fuer Kategorie
    $query.= "AND s.ID = n.Status_ID "; // Join fuer Status
    $query.= "AND l.ID = n.Land_ID "; // Join fuer Land
    $query.= "AND p.ID = n.Projekt_ID "; //Join fuer Projekt
    

if ($chosenForm['land'] != -1) {
        
        
        $query.= "AND n.Land_ID = ".$chosenForm['land']." ";
        
    }
    if ($chosenForm['kategorie'] != -1) {
        
        $query.= "AND n.Kategorie_ID = ".$chosenForm['kategorie']." ";
    }
    if ($chosenForm['status'] != -1) {
        $query.= "AND n.Status_ID = ".$chosenForm['status']." ";
    
    }
    if ($chosenForm['projekt'] != -1) {
        
        $query.= "AND n.Projekt_ID = '".$chosenForm['projekt']."' ";
        
    }
    $query.= " LIMIT 0 , 100 ";
Aber es kann trotzdem ja nicht sein das die Performence so in den Keller geht. In der DB sind 254 IDs Einträge mit jeweils 11 weiteren Felder die zu einer ID gehören . In den 11 Feldern stehen max 20 Zeichen pro Feld.


Aber was wäre die Lösung für das Problem, wie krieg ich es hin das ich seiten umblättern kann
ich rufe diese Funktion nämlich so auf :
PHP:
    <table width="100%"  id="resultTable" class="tablesorter"> 
                                <thead> 
                                    <tr> 
                                        <th>Nm.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> 
                                        <th>Titel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> 
                                        <th>Anwendungsbereich&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
                                        <th>Kategorie&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> 
                                        <th>Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> 
                                        <th>Datum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th> 
                                        <th>Komentar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
                                        <?php
                                            if($_SESSION["user_edit"]=="1"){
                                                echo '<th>Editieren&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>';
                                            }?>
                                    </tr>
                                </thead> 
                                <tbody>
                                <?php
                                suchen($chosenForm);
                                ?>
                                </tbody>         
                        </table>
 
Zuletzt bearbeitet:
AW: PHP und MSQLI Problem Prepare Methode

Jungs kann den keiner mir ein Tip geben, was ich falsch mache.
Den die SQL abfrage läuft ohne Probleme wenn ich Sie direkt in phpMyAdmin ausführe. Also muss es was mit PHP zu tun haben.
 
AW: PHP und MSQLI Problem Prepare Methode

Am besten lässt du dir die Abfrage mal mit einem echo ausgeben, kopierst diese Abfrage in den Zwischenspeicher und fügst das ganze mal im phpmyadmin ein. Manchmal findet man dann Fehler, die sonst nicht zu finden sind.
 
AW: PHP und MSQLI Problem Prepare Methode

Also die erste Frage ist schon mal, was die 1 nach WHERE da soll?

Ansonsten würde ich deinen query wie folgt aufbauen:

PHP:
<?php
$query = 'SELECT
            DISTINCT n.ID AS ID,
            n.Code AS Nr,
            n.Titel AS Titel,
            n.Anwendungsbereich AS Anwendungsbereich,
            DATE_FORMAT(n.Datum, "%d.%m.%Y") AS Datum,
            n.Vorschlaege AS Kommentar,
            n.Editor AS Editor,
           
            k.Name AS Kategorie,

            s.Name AS Status,

            p.Name AS Projekt
       
        FROM
            normen n
            LEFT JOIN kategorie AS k ON (k.ID = n.Kategorie_ID)
            LEFT JOIN status AS s  ON (s.ID = n.Status_ID) 
            LEFT JOIN land l AS l ON (l.ID = n.Land_ID)
            LEFT JOIN projekt AS p  ON (p.ID = n.Projekt_ID)
        WHERE
            n.Kategorie_ID = int
        ORDER BY
            n.Kategorie_ID
        LIMIT
            0, 10';
$result = mysql_query($query);

if(mysql_num_rows($result)) {
    $return = array();
    while($x = mysql_fetch_array($result)) {
        $return[] = $x;
    }
    
    echo '<pre>'; print_r($return); echo '</pre>';
} else {
    echo 'kein Ergebnis';
}
?>

Was nun noch entsprechend anzupassen ist, ist die Bedingung. Was willst du als Hauptbedingung für die Abfrage setzen. Das anpassen und testen.

Das ganze ist mal etwas sortiert dargestellt, hat jedoch mit der Abfrage selbst nichts zu tun.
 
AW: PHP und MSQLI Problem Prepare Methode

Danke für eure Antworten:

zu pac_nrw: Sql Anfrage funktioniert, den in der alten Version mit dem standart mysql_query funktionierte diese Funktion.

zu
saila: Die Anfrage funktioniert ansich, wie oben schon erwähnt ging die alte Version mit mysql_query ohne Probleme.
Nur würde ich gern dieses Problem gerne mit MySqli und Prepared Statements lösen. Da es angeblich mehr performence und Sicherheit mit sich bringt.
Das funktioniert auf kleine Anfragen ohne Probleme, z.B für ein Login Seassion Script. Aber bei dieser Anfrage krieg ich so um die 50 Ergebnise und dann sagt mir der Server das die Verbindung zum Server zurück gesetzt wurde.
 
AW: PHP und MSQLI Problem Prepare Methode

Ok, mysqli. In deinem Fall wäre ein multi_query interessant - wobei ich die Performance-Ergebnisse beachten würde im Vergleich zu mysqli_query

PHP:
<?php
$query = 'SELECT
            DISTINCT n.ID AS ID,
            n.Code AS Nr,
            n.Titel AS Titel,
            n.Anwendungsbereich AS Anwendungsbereich,
            DATE_FORMAT(n.Datum, "%d.%m.%Y") AS Datum,
            n.Vorschlaege AS Kommentar,
            n.Editor AS Editor,
           
            k.Name AS Kategorie,

            s.Name AS Status,

            p.Name AS Projekt
       
        FROM
            normen n
            LEFT JOIN kategorie AS k ON (k.ID = n.Kategorie_ID)
            LEFT JOIN status AS s  ON (s.ID = n.Status_ID) 
            LEFT JOIN land l AS l ON (l.ID = n.Land_ID)
            LEFT JOIN projekt AS p  ON (p.ID = n.Projekt_ID)
        WHERE
            n.Kategorie_ID = int
        ORDER BY
            n.Kategorie_ID
        LIMIT
            0, 10';

// aus dem Manual:
if ($result = mysqli_query($link, $query)) {
    printf("Select returned %d rows.\n", mysqli_num_rows($result));

    /* free result set */
    mysqli_free_result($result);
}
?>

Nun bin ich nicht in mysqli vertieft und kann dir somit nicht sagen, ob ORDER BY enthalten sein darf. Allerdings gehe ich davon aus, das dieser Query auch laufen wird. Ansonsten bleibt noch multi_query. Sprich dein altes Beispiel nur mit multi_query($query) umgesetzt.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.998
Beiträge
1.540.297
Mitglieder
68.226
Neuestes Mitglied
JulietMitchell20
Oben