2008-09-17 17 views
0

PHP'de mysqli sınıfını ve hazırlanmış ifadeleri kullanarak bir veritabanı işleyicisi sınıfı yazıyordum. Sonucu yazdırmaya çalışıyordum. Yarasadan hemen işe yaramadı, bu yüzden bazı hata ayıklama yapmaya karar verdim. num_rows() yöntemini mysqli_statement sınıfından kullanmayı denedim, ancak 0'a dönmeye devam ettim. Daha azını korumak için küçük bir test kodu yazmaya karar verdim, böylece neyin yanlış gittiğini görebildim. Ardından, istediğim verileri geri döndürdüm, ancak num_rows() yöntemi, aslında bazı verileri seçip aldığında bile 0 değerini döndürüyor.mysqli_statement :: num_rows() yanlış değeri döndürür

$mysqli = new mysqli('localhost', 'username', 'password', 'database'); 
if(mysqli_connect_errno()) 
{ 
    die('connection failed'); 
} 

$statement = $mysqli->stmt_init(); 

$query = "SELECT name FROM table WHERE id = '2000'"; 
if($statement->prepare($query)) 
{ 
    $statement->execute(); 
    $statement->bind_result($name); 
    $statement->fetch(); 
    $statement->store_result(); 
    echo $statement->num_rows(); 
    echo $name; 
} 
else 
{ 
    echo 'prepare statement failed'; 
    exit(); 
} 

Yani evet, beklenen sonuç::

1name 

Ve gerçek sonuç şudur: Bu yüzden

0name 

kimse bana söyleyebilir İşte kod nedir?

cevap

5

acaba num_rows geçerli resultset göre bildiriyor() eğer. Verileri almadan önce num_rows() yakalamayı deneyin. Örneğin.

if($statement->prepare($query)) 
{ 
    $statement->execute(); 
    $statement->store_result(); 
    echo $statement->num_rows(); 
    $statement->bind_result($name); 
    $statement->fetch(); 
    echo $name; 
} 

Bunun herhangi bir etkisi var mı?

+1

Gerçekten de sorun buydu. Num_rows() öğesinin doğru değeri döndürmesi için, get() öğesinden önce store_result() çağrısı yapılmalıdır. –

+0

Ben de böyle düşündüm; Verilerin getirilmesi iç satır sayacını artırır, böylece bir şeyleri yapabilirsiniz ($ ifade-> num_rows()) {/ * şeyler yapın * /} –

+0

@ StevenOxley'in yorumunun bu soruya verilen cevap olduğuna inanıyorum. – Sablefoste

0

$ name bildirmiş gibi görünmüyor.

Ayrıca bind_result() kaldırmayı deneyin ve getir() bu yüzden böyle bir şey okur:

$statement->execute(); 

$statement->store_result(); 

printf("Number of rows: %d.\n", $statement->num_rows); 
1

num_rows bir yöntem değildir, bir özelliktir.

+0

Doğru, mysqli_stmt yerine mysqli_result sınıf belgelerine bakmış olmalıyım. –

İlgili konular