PHP Hazırlayan Bildirimi İade -1

2 Cevap php

Ben şimdi bir süre için hazırlanmış deyimleri kullanarak oldum ve ben herhangi bir sorun olmadı.

Şimdi ben çalışıyorum:

$sql="SELECT PhotoID,Caption FROM Photos WHERE EntityID=? AND TypeID=? LIMIT ?,?";

$iDB = new mysqliDB(); // Extends mysqli

$stmt = $iDB->prepare($sql);

$stmt->bind_param('iiii',$entityID,$typeID,$minRange,$maxRange);

$stmt->execute();

$stmt->bind_result($photoID,$caption);

echo("Affected={$stmt->affected_rows}");

Bu yazdırır -1. Ben üçlü bindParam tüm 4 değerleri ayarlanmış olduğunu, test ve ilgili değerleri ile MyAdmin yapıştırdığınız zaman sql sorgusu çalıştığını var.

Herhangi bir fikir ne bu neden olabilir?

Düzenleme :: çevrimiçi cevabı buldum, görünüşe göre ben $ deyim-> store_result () kullanmanız gerekir; .. yürütme ama şimdi ve daha önce hiç gerekli emin değilim sonra ..

2 Cevap

Her mysqli fonksiyon / metod can başarısız. Eğer artırdık nasıl bağlı class mysqli muhtemelen her dönüş değeri test etmek için vardır. Bir yöntem dönüş false bir hata oluştu ve hata mesajı mysqli'nin veya deyim nesnenin ya da bir özelliğinde saklanır.

$sql="SELECT PhotoID,Caption FROM Photos WHERE EntityID=? AND TypeID=? LIMIT ?,?";

$iDB = new mysqliDB(); // Extends mysqli
if ($iDB->connect_error) {
  printf('connect error (%d) %s', $iDB->connect_errno, htmlspecialchars($iDB->connect_error));
  die;
}

$stmt = $iDB->prepare($sql);
if ( false===$stmt ) {
  printf('prepare failed: %s', htmlspecialchars($iDB->error));
  die;
}

$rc = $stmt->bind_param('iiii',$entityID,$typeID,$minRange,$maxRange);
if ( false===$rc ) {
  printf('bind_param failed: %s', htmlspecialchars($stmt->error));
  die;
}

$rc = $stmt->execute();
if ( false===$rc ) {
  printf('execute failed: %s', htmlspecialchars($stmt->error));
  die;
}

$rc = $stmt->bind_result($photoID,$caption);
if ( false===$rc ) {
  printf('bind_result failed: %s', htmlspecialchars($stmt->error));
  die;
}

// echo("Affected={$stmt->affected_rows}");

Ait belgelere mysqli_stmt->affected_rows :

Bu işlev yalnızca sorgu ile çalıştığı update a table. In order to get the number of rows from a SELECT query, use mysqli_stmt_num_rows() instead.

Yani sadece bir UPDATE veya DELETE sorgusu ile bu yöntemi kullanabilirsiniz.

Ayrıca:

Return Values An integer greater than zero indicates the number of rows affected or retrieved. Zero indicates that no records where updated for an UPDATE/DELETE statement, no rows matched the WHERE clause in the query or that no query has yet been executed. -1 indicates that the query has returned an error. NULL indicates an invalid argument was supplied to the function.

Ama bu aynı zamanda bir SELECT ifadesi için onu kullanmayı deneyin çünkü -1 döndürür anlamına gelebilir. mysqli_stmt_num_rows() deneyin.

Update:

: Örnek I bağlantılı olan sayfayı oluşturmak

$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
if ($stmt = $mysqli->prepare($query)) {

    /* execute query */
    $stmt->execute();

    /* store result */
    $stmt->store_result();

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

    /* close statement */
    $stmt->close();
}