while döngüsü hata neden hazır deyimi

2 Cevap php

Ben iyi çalışması gerektiğini, aşağıdaki basit mysqli php uygulama var. $ Pk mükemmel kabul edilen ve geçerli bir article_no ve mysql doğrudan çalıştırıldığında sorgu mükemmel çalışır. Ben yürütür iken tetsing hariç her olay ve sonuçta çıkış deyimleri koyduk. While döngüsü girdi, ve ben neden emin değilim asla.

düzenleme: 0 satır verdiğini aslında sorunu daralmış var, ama phpmyadmin aynı sorgu olarak doğru sonucu verir neden hiçbir fikrim yok.

edit2: Ben while döngüsünün kurtulmak ve sadece var olsun eğer

    if (!$getRecords->fetch()) {
    printf("<p>ErrorNumber: %d\n", $getRecords->errno);
}

Bu Errno 0 olduğunu. Yani hiçbir kayıt getirilen ve hiçbir hata var, henüz geçerli bir sorgu olduğunu gösterir.

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$pk = $_GET["pk"];
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if(1 < 2) {
    echo "test inside loop";
    $query1 = 'SELECT ARTICLE_NO FROM AUCTIONS WHERE ARTICLE_NO = ?';
    if ($getRecords = $con->prepare($query1)) {
echo "inside second loop";
    	$getRecords->bind_param("i", $pk);
echo "test after bind param";
    	$getRecords->execute();
echo "test after bind execute";
    	$getRecords->bind_result($ARTICLE_NO);
echo "test after bind result";
    	while ($getRecords->fetch()) {
    		echo "test inside while";
    		echo "<h1>".$ARTICLE_NO."</h1>";
    	}
    }
}

edit:

Bu kod ile çalıştı:

<?php
$mysqli = new mysqli("localhost", "", "", "");
$pk = $_GET["pk"];
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = ? LIMIT 5")) {
    $stmt->bind_param("i", $pk);
    $stmt->execute();
    /* bind variables to prepared statement */
    $stmt->bind_result($col1, $col2);
    /* fetch values */
    while ($stmt->fetch()) {
    	printf("%s %s\n", $col1, $col2);
    }
    /* close statement */
    $stmt->close();
}
/* close connection */
$mysqli->close();
?>

Ben gayet iyi çalışıyor parametreleri götürmek durumunda bu, $ pk olmadan çalışır. Bu, GET yoluyla pk alma ile ilgili bir sorun değil çünkü = 1 $ pk atarsanız; Bunun yerine yine başarısız olur. 1 phmyadmin içinde article_no = 1 LİMİT 5 eserler ince ihaleleri geçerli article_no ve SEÇ ARTICLE_NAME, İZLEYİN olduğunu.

edit: sorun mysqli bigint işlemez ki oldu, ben şimdi bir dize olarak k kullanıyorum ve gayet iyi çalışıyor.

2 Cevap

Değerini kontrol edin:

$getRecords->num_rows

açığa yardımcı hangi olmadığını daha önceki SELECT aslında herhangi bir veri dönüyor

Ayrıca eklemek gerekebilir:

$getRecords->store_result()

öncelikle bütün sorgu sonuç kümesindeki satır sayısı için istemeden önce tamamladığını ettik sağlamak.

Ayrıca - bir tamsayı $pk dökme emin olun! Bu içinde geçirilen değer karıştırılmış oluyor mümkündür.

Bunu kodu modifiye ettik emin değilim, ama sen orada bağlanmak istediğiniz veritabanını seçilerek görünmüyor.

Bu sorun ise bunun için mysqli_select_db (...) kullanın.

EDIT: sütun, tablo adı vb için büyük kullanarak konum gibi de görünüyor

Harf duyarlılığı sağ olsun, o komut satırından çalışır çünkü dava duyarsızlığı küstah olduğunuzu olabilir. Bildiğim kadarıyla PHP mysqli sürücüsü en az sütun adları konusunda hassas bir durumdur.