Neden benim php script dondurma?

4 Cevap

Ne benim php kod dondurma neden oluyor? Ben while döngüsünün neden olduğunu biliyorum, ama ben $ max_threads var -; yani sonunda bunu yapmak gerekir.

<html>
    <head>
        <?php
            $db = mysql_connect("host","name","pass") or die("Can't connect to host");
            mysql_select_db("dbname",$db) or die("Can't connect to DB"); 

            $sql_result = mysql_query("SELECT MAX(Thread) FROM test_posts", $db);

            $rs = mysql_fetch_row($sql_result);

            $max_threads = $rs[0];

            $board = $_GET['board'];
        ?>



    </head>

    <body>


        <?php


            While($max_threads >= 0)
            {
                $sql_result = mysql_query("SELECT MIN(ID) FROM test_posts WHERE Thread=".$max_threads."", $db);
                $rs = mysql_fetch_row($sql_result);

                $sql_result = mysql_query("SELECT post FROM test_posts WHERE ID=".$rs[0]."", $db);
                $post = mysql_fetch_row($sql_result);

                $sql_result = mysql_query("SELECT name FROM test_posts WHERE ID=".$rs[0]."", $db);
                $name = mysql_fetch_row($sql_result);

                $sql_result = mysql_query("SELECT trip FROM test_posts WHERE ID=".$rs[0]."", $db);
                $trip = mysql_fetch_row($sql_result);

                if(!empty($post))
                    echo'<div class="postbox"><h4>'.$name[0].'['.$trip[0].']</h4><hr />' . $post[0] . '<br /><hr />[<a href="http://prime.programming-designs.com/test_forum/viewthread.php?thread='.$max_threads.'">Reply</a>]</div>';

                $max_threads--;
            }

        ?>
    </body>
</html>

4 Cevap

İlk olarak, tamamen yabancı HTML bit kurtulmak almak öneririz. Ardından, soruna neden olan satırı bulup bulamayacağını line-by-line görmek için, yavaş yavaş kodunuzu oluşturmak. Dolayısıyla, sadece veritabanına bağlanan bir senaryo yazmak ve ne olduğunu görün.

Örneğin bulursanız bu kodu ...

<?php
    $db = mysql_connect("host","name","pass") or die("Can't connect to host");
    mysql_select_db("dbname",$db) or die("Can't connect to DB"); 
?>

... Kendi dondurma neden olduğunu, daha sonra kolayca MySQL sunucusu ile ilgili bir sorun olabilir.

Tarayıcı kendisi çöküyor Ancak, bu oldukça PHP veya MySQL yapıyor şey daha sisteminize ile ilgili bir sorun gibi geliyor ...

Ben SQL veritabanı döngü başına 4 kez isabet çünkü bu kadar düşünüyorum. Belki de bir kez tüm erişim ve oradan gelen verileri ayrıştırmak herhangi bir yolu var mı?

$dbsql = 'SELECT * FROM my_database';
$result = mysql_query($dbsql);

while($row = mysql_fetch_array($result)) {
     // Parse information here, rather than 
     // accessing the database for individual variables... 
}

Onun gibi bir şey.

Güncelleme:

Gördüğüm bazı burada ve ne ben zaten söyledim (ve görevden ettik) dışında tuhaflıklar var kodlama:

Bu bölüm yankı ve dize arasında bir boşluk yoktu. 'Hr' eleman başlayan dirsek yoktu.

echo '<div class="postbox"><h4>'.$name[0].'['.$trip[0].']</h4><hr>' . $post[0] . '<br /><hr />[<a href="http://prime.programming-designs.com/test_forum/viewthread.php?thread='.$max_threads.'">Reply</a>]</div>';

'While' harfle olmamalı.

while($max_threads >= 0)

Yine, temiz kod başlamak için iyi bir yerdir, ama şahsen ben bir tek bu var. Ben sadece son zamanlarda çok sayıda işaretleme hataları vardı çünkü, IE (ve başka hiçbir tarayıcı) çökmesini kendi sitem, temizledik. Umarım yardımcı olur.

O yerine 1 + (4 * n) sorgularının bu 1 SQL sorgusu deneyin:

SELECT MIN(ID), post, name, trip FROM test_posts GROUP BY Thread

Belki LIMIT 50 de sonunda (veya maksimum ne parçacığı # dönmek için), bu verilerin bir sürü olabilir.

Sen while ($row = mysql_fetch_row($sql_result)) { /* echo(...); */ } aracılığıyla, bu sorgu sonuçlarının yerine $max_threads ve tüm ekstra db çağrıları üzerinde sadece döngü olabilir.

Değil ki (bir forum? Her dişin kök görevini alma) verileri hakkında daha fazla bilmeden getirmek için çalışıyoruz ne kadar exactly aynı, ama oldukça yakın olmalıdır emin olun.

(Not:.. Bir dişli 2kanallı tarzı forum şeyse, o ideal bir db tasarım emin değilim bir ebeveyn-çocuk adjacency list her iş parçacığı için bir numara sayısını koruyarak daha iyi olabilir Sadece bir tahmin gerçi.)

Belki Haber ve kod basit fonksiyon çağrıları dağılım yapabilirsiniz:

function of($required)
{
    $args = func_get_args();
    var_dump($args);
    ob_flush();
    flush();
}
of(__LINE__, $max_threads);

Ayrıca sorguları için böyle bir şey kullanabilirsiniz:

function mydb_query($query, $db = null)
{
    $args = func_get_args();
    $result = call_user_func_array('mysql_query', $args);
    if (!$result) {
        of(array(__FUNCTION__), mysql_error(), $sql);
        //return something else?
    }
    return $result;
}
$result = mydb_query("SELECT post, name, trip FROM test_posts WHERE ID = (SELECT MIN(ID) FROM test_posts WHERE Thread={$max_threads})", $db);

Sen hazırlanmış tablolar desteği ile mysqli / PDO / çerçeve kullanmalısınız.