2016-05-19 14 views
0

Ich bin irgendwie verwirrt, warum, wenn ich von prozeduralen Stil in objektorientierten Stil, die While-Schleife ist in Ordnung?prozeduralen Stil und objektorientierten Stil

Dies ist der PHP-Block auf der Oberseite meines Skript:

$object = new mysqli('localhost', 'readmode', '[email protected]', 'practices'); 
$sql = 'SELECT * FROM paintings'; 
$result = $object->query($sql); 
if ($object->connect_error) { 
    $error = $object->connect_error; 
} else { 
    $num_rows = mysqli_num_rows (mysqli_query($object, $sql)); 
} 

Dies ist der PHP-Code in meinem html:

<?php if (isset($error)) { 
    echo "<p>$error</p>"; 
} else { ?> 
    <pre><?php while ($rowinfo = mysqli_fetch_assoc($result)) { 
     print_r ($rowinfo); 
    } ?></pre> 
<?php } ?> 

Wenn ich $object->query($sql) statt $result verwenden, wird die Schleife unendlich. (Ich springe hin und her mit dem Verfahren Stil und dem objektorientierten Stil, weil ich mit ihm bin praktizierende)

+0

Fragen über den "Unterschied" macht wenig Sinn. Sie müssen lediglich eine Anweisungsobjektinstanz erstellen (was die init-Methode tut), bevor Sie sie vorbereiten können. Und wie für 3), was meinst du mit synonym? Sie können sie nicht "mischen", Sie müssen alle Operationen entweder mit dem einen oder dem anderen Stil ausführen. – CBroe

Antwort

0

berühmt für nicht zu wissen, wie Fragen

Sad zu fragen, aber wahr .

Wenn etwas von Ihrem Code nicht funktioniert, ist es besser, diesen Code zu veröffentlichen, anstatt eine lange literarische Erklärung zu schreiben.

Wenn Sie es machen

while ($rowinfo = mysqli_fetch_assoc($object->query($sql))) 

es in der Tat eine unendliche Schleife macht, weil Sie machen Ihre SQL-Abfrage ausführen, immer und immer wieder sind.

Das Problem hat nichts mit der Objektsyntax zu tun, es bleibt auch bei der Prozedur gleich. Sie sollten das Ergebnis nur verwenden, anstatt die Abfrage erneut aufzurufen.

Im Wesentlichen müssen Sie Ihre Abfrage ** nur einmal ausführen. **
Das macht auch Ihren anderen Code-Schnipsel falsch. Es sollte

$object = new mysqli('localhost', 'readmode', '[email protected]', 'practices'); 
$sql = 'SELECT * FROM paintings'; 
$result = $object->query($sql); 
if ($object->connect_error) { 
    $error = $object->connect_error; 
} else { 
    $num_rows = mysqli_num_rows($result); 
} 

sein sonst wird es Ihre Abfrage zweimal ausführen.

+0

danke, ich behalte Ihre Vorschläge im Hinterkopf, wenn Sie das nächste Mal Fragen stellen. – Gnahzllib

+0

Diese Regel gilt übrigens nicht für den foreach-Operator, der Ihre Abfrage nur einmal ausführt. Obwohl Sie es nicht mit mysqli verwenden können, aber etwas wie 'foreach ($ db-> query ($ sql) als $ row)' wird mit PDO funktionieren. –