Neden bu mysqli deyimi hazırlamak iş değil mi?

3 Cevap php

Ben bu kodu oluşturuldu:

$statement = $db->prepare("SELECT * FROM phptech_contact");
$statement->execute();
$result = $statement->result_metadata();
$object = $result->fetch_object();

print_r( $object );

Onu çalıştırdığınızda, bu çalışmıyor. Bu işe yaramazsa, neden kimse bana söyleyebilir misiniz?

Veri iade edilmelidir yüzden bu tabloda 20 satır var.

3 Cevap

Dan http://ch.php.net/manual/en/mysqli-stmt.result-metadata.php

Note: The result set returned by mysqli_stmt_result_metadata() contains only metadata. It does not contain any row results. The rows are obtained by using the statement handle with mysqli_stmt_fetch().

Sürece bu meta verileri gerekmez olarak bu yöntemi çağırmak gerekmez.

$statement = $db->prepare("SELECT fld1, fld2 FROM phptech_contact");
$statement->execute();
$stmt->bind_result($fld1, $fld2);

while ($stmt->fetch()) {
    echo "$fld1 and $fld2<br />";
}

Ama gerçekten mysqli uzantısı sevmediğim. PDO çok soğuktur ... ;-)

$db = new PDO('...');
$stmt = $db->prepare("SELECT fld1, fld2 FROM phptech_contact");
$stmt->execute();

while ($obj = $stmt->fetchObject()) {
    // ...
}

veya

$objs = stmt->fetchAll(PDO::FETCH_OBJ);

Eğer veritabanından satırları almak için çalışıyorsanız, size gereken işlevi mysqli_stmt::fetch() , not mysqli_stmt::fetch_metadata()

Ayrıca bir kaç adım kaçırıyorsun. Hazırlanmış deyimleri kullanırken, yerine yıldız joker kullanarak dönmek istiyorum alanları belirtmeniz gerekir, ve sonra mysqli_stmt::bind_result() veritabanı alanları içeri konulmalıdır hangi değişkenlerin belirtmek için kullanın

Eğer orijinal MySQL uzantısı ile daha aşina iseniz, hazırlanan ifadeleri kullanmak için farklı bir süreç var. Eğer select ifadesi bir parametre varsa (örneğin, "NEREDE değeri =?") Ifadeleri kesinlikle tavsiye edilir hazırlanmış, ancak basit bir sorgu için, mysqli:query() would be sufficient, and not very different from the process of mysql_query()

Ben sorun olduğuna inanıyorum gerçek sonuçlar olmadan mysqli_stmt::result_metadata() returns a mysqli_result nesne - sadece meta tutar.

Peki ne yapmak istiyorsun use $result = $statement->bind_result(...) and then call $result->fetch() art arda sonuçlar elde etmektir.

One of the comments under the bind-result() article shows how to do this for a query like yours, mutlaka iade edilen tüm sütunlar nerede bilmiyorum.