Çözüldü PHP "trying to get property 'num_rows' of non-object" hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

behzat_c

Hectopat
Katılım
28 Kasım 2020
Mesajlar
903
Çözümler
6
Daha fazla  
Cinsiyet
Erkek
Merhabalar. PHP'den HTML'e PhpMyAdmin veritabanından veri çekip ekrana yazdıran bir kod yazdım ama fotoğraftaki hatayı veriyor. Çözümünü araştırdım fakat anlayamadım tam olarak. Kodları YouTube'dan baktım videonun sahibinde gayet güzel çalışıyor bende bu hata var. PHP veri tabanı bağlantısı başarılı onu test ettim. Hatayla ilgili yardımcı olur musunuz?

1672417763001.png


İlgili satırdaki kod:

1672417800832.png
 

Dosya Ekleri

  • 1672417795944.png
    1672417795944.png
    7,5 KB · Görüntüleme: 21
Çözüm
Kodunuzun neredeyse tamamen aynı olanını başka bir veritabanında denedim bir problem çıkmadı, başka bir veri tabanı oluşturup deneyebilir misiniz?

Screenshot_3.png
Edit;

Hocam SQL dosyasını gönderemem hem gizlilik hem de dosya boyutu çok büyük buraya göndermem hem benim hem sizin saatlerinizi alır.
conn.php yi denediğimde connection success alıyorum yani bir sıkıntı yok.

PHP:
<?php
$servername = "localhost";
$username = "root";
$password = "";

$conn=mysqli_connect($servername, $username, $password);

if(!$conn)
{
 die("Connection failed.".mysqli_connect_error());
}
else
{
 echo "Connection success.";
}
?>

Hocam biraz geç fark ettim.
Buradaki $conn değişkeninde hangi veri tabanı olduğunu belirtmemişsiniz.

PHP:
$conn=mysqli_connect($servername, $username, $password, "VeritabanıAdı");

Buradaki gibi veri tabanının adını girer misiniz?
@behzat_c
Veri tabanı ile yazdığınız kodların tamamını atar mısınız? Hangi SQL sorgusunu çalıştırdınız?
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <tr>
        <th>adi</th>
        <th>soyadi</th>

    </tr>

    <?php
        include("conn.php");
        $select="SELECT * FROM 101m";
        $result=$conn->query($select);

        if($result->num_rows>0)
        {
            while($select=$result->fetch_assoc())
            {
                echo"
                <tr>
                    <td>".$select['adi']."</td>
                    <td>".$select['soyadi']."</td>

                </tr>
                ";
            }
        }
        else
        {
            echo "not found.";
        }
    ?>
</body>
</html>

Veritabanı derken tam olarak neyi atmamı istediniz?
 
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
</head>
<body>
 <tr>
 <th>adi</th>
 <th>soyadi</th>

 </tr>

 <?php
 include("conn.php");
 $select="SELECT * FROM 101m";
 $result=$conn->query($select);

 if($result->num_rows>0)
 {
 while($select=$result->fetch_assoc())
 {
 echo"
 <tr>
 <td>".$select['adi']."</td>
 <td>".$select['soyadi']."</td>

 </tr>
 ";
 }
 }
 else
 {
 echo "not found.";
 }
 ?>
</body>
</html>

Veri tabanı derken tam olarak neyi atmamı istediniz?

Veri tabanından kastım PhpMyAdmin üzerinden SQL dosyasını almanızdı.
Kodunuzu inceledim ve denedim kodunuzda bir hata yok. "include("conn.php");" kodunda conn.php dosyanızda veya PhpMyAdmin üzerinde yanlış veya hatalı bir işlem yaptınız. conn.php dosyanızı da atar mısınız?
Ayrıca aşağıdaki resimde olduğu gibi yapıp gelen dosyayı gönderir misiniz?

Screenshot_2.png
 
Veritabanından kastım PhpMyAdmin üzerinden SQL dosyasını almanızdı.
Kodunuzu inceledim ve denedim kodunuzda bir hata yok. "include("conn.php");" kodunda conn.php dosyanızda veya phpmyadmin üzerinde yanlış veya hatalı bir işlem yaptınız. conn.php dosyanızı da atar mısınız?

Ayrıca aşağıdaki resimde olduğu gibi yapıp gelen dosyayı gönderir misiniz?

Eki Görüntüle 1618333
Hocam SQL dosyasını gönderemem hem gizlilik hem de dosya boyutu çok büyük buraya göndermem hem benim hem sizin saatlerinizi alır.
conn.php yi denediğimde connection success alıyorum yani bir sıkıntı yok.

PHP:
<?php
$servername = "localhost";
$username = "root";
$password = "";

$conn=mysqli_connect($servername, $username, $password);

if(!$conn)
{
    die("Connection failed.".mysqli_connect_error());
}
else
{
    echo "Connection success.";
}
?>
 
Kodunuzun neredeyse tamamen aynı olanını başka bir veritabanında denedim bir problem çıkmadı, başka bir veri tabanı oluşturup deneyebilir misiniz?

Screenshot_3.png
Edit;

Hocam SQL dosyasını gönderemem hem gizlilik hem de dosya boyutu çok büyük buraya göndermem hem benim hem sizin saatlerinizi alır.
conn.php yi denediğimde connection success alıyorum yani bir sıkıntı yok.

PHP:
<?php
$servername = "localhost";
$username = "root";
$password = "";

$conn=mysqli_connect($servername, $username, $password);

if(!$conn)
{
 die("Connection failed.".mysqli_connect_error());
}
else
{
 echo "Connection success.";
}
?>

Hocam biraz geç fark ettim.
Buradaki $conn değişkeninde hangi veri tabanı olduğunu belirtmemişsiniz.

PHP:
$conn=mysqli_connect($servername, $username, $password, "VeritabanıAdı");

Buradaki gibi veri tabanının adını girer misiniz?
@behzat_c
 
Son düzenleme:
Çözüm
Hocam sanırım düzeldi şu an tüm veritabanını göstermeye çalıştığı için Fatal error: Allowed Memory size of 536870912 bytes exhausted (tried to allocate 62914568 bytes) hatası veriyor.

Bunu çözmek içinde textboxa girileni aratıp listelemesini istiyorum. Butona bastığımızda listeleyecek. Vaktiniz varsa bu koduda yazabilir misiniz? Eğer yoksa sıkıntı değil.
 
Son düzenleyen: Moderatör:
Hocam sanırım düzeldi şu an tüm veritabanını göstermeye çalıştığı için Fatal error: Allowed Memory size of 536870912 bytes exhausted (tried to allocate 62914568 bytes) hatası veriyor. Bunu çözmek içinde textboxa girileni aratıp listelemesini istiyorum. Butona bastığımızda listeleyecek. Vaktiniz varsa bu koduda yazabilir misiniz? Eğer yoksa sıkıntı değil.

Evet düzeldi, bu hatayı çözmek için conn.php'de en sona "ini_set('memory_limit', '-1');" yazabilirsiniz. Ayrıca gelen sorguyu sınırlamak için "SELECT * FROM 101m LIMIT 500" sorgusunu çalıştırabilirsiniz, bu sorgu sonucun ilk 500'ünü gösterecek.
Listelemek için verileri kullanıcıdan almak istiyorsan form tagları ile PHP'ye göndermen gerekiyor kabaca. Nasıl yapılacağını bilmiyor isen örnek kod verebilirim.
 
Son düzenleme:
Evet düzeldi, bu hatayı çözmek için conn.php'de en sona "ini_set('memory_limit', '-1');" yazabilirsiniz. Ayrıca gelen sorguyu sınırlamak için "SELECT * FROM 101m LIMIT 500" sorgusunu çalıştırabilirsiniz, bu sorgu sonucun ilk 500'ünü gösterecek.
Listelemek için verileri kullanıcıdan almak istiyorsan form tagları ile PHP'ye göndermen gerekiyor kabaca. Nasıl yapılacağını bilmiyor isen örnek kod verebilirim.
Örnek kod iyi olur. Bu arada tabloya istediğim gibi sıralayamıyorum yani satır satır olmuyor veritabanındaki gibi. Yanyana yazmış hepsini.

@AhmetKnKc yardımcı olabilecek misiniz?
 
Son düzenleme:
Örnek kod iyi olur. Bu arada tabloya istediğim gibi sıralayamıyorum yani satır satır olmuyor veritabanındaki gibi. Yanyana yazmış hepsini.

@AhmetKnKc yardımcı olabilecek misiniz?
Tamda mesajı yazıyordum.




Asıl alanım web olmadığı için biraz uzun sürdü. Ayrıca güzel görünmesini istediğimden birazcık tasarımla da uğraştım. Aşağıda kodun tamamını bırakıyorum veri tabanı bağlantılarını düzenleyip kullanabilirsiniz.

Kod:

PHP:
<!doctype html>
<html lang="tr">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    <title>Database Manager</title>
</head>

<body>

    <div class="col-md-12 row justify-content-center" style="padding-top: 100px;">
        <div class="row justify-content-center">

            <div class="col-md-2 text-center">

                <form action="index.php" method="post">

                    <label>Çekilecek Kişi Sayısı</label>
                    <input type="number" name="pst-Limit" class="form-control" name="" value="<?= isset($_POST['pst-Limit']) ? $_POST['pst-Limit'] : '15'  ?>">
                    <br>
                    <button type="submit" name="pst-SubmitData" class="btn btn-outline-success w-8">Verileri Çek</button>

                </form>
            </div>
        </div>
    </div>
    <br>
    <br>
    <div class="col-md-12 row justify-content-center">
        <div class="col col-md-6 text-center justify-content-center">
            <?php

            if (isset($_POST['pst-SubmitData']) and isset($_POST['pst-Limit'])) {

                $conn = new mysqli('localhost', "root", "", "mytestdb");

                $Limit = $_POST['pst-Limit'];
               
                $select = "SELECT * FROM bilgiler LIMIT $Limit";
                $result = $conn->query($select);

                $table = "<table class='table'>
<thead>
    <th scope='col'>#</th>
    <th scope='col'>Ad</th>
    <th scope='col'>Soyad</th>
</thead>
<tbody>
";
                if ($result->num_rows > 0) {
                    $count = 0;

                    while ($select = $result->fetch_assoc()) {
                        $name = $select['adi'];
                        $surname = $select['soyadi'];

                        $table .= "
                    <tr>
                    <th scope='row'>$count</th>
                    <td>$name</td>
                    <td>$surname</td>
                    </tr>
                    ";
                        $count++;
                    }
                    $table .= '</tbody></table>';

                    echo $table;
                } else {
                    echo "not found.";
                    $table = "";
                }
            } else {
                echo "Bir değer giriniz.";
            }
            ?>
        </div>
    </div>

    <!-- <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> -->
</body>

</html>



Screenshot_6.png
 

Geri
Yukarı