SORU
4 HAZİRAN 2010, Cuma


() mysql_fetch_array parametre 1 kaynak (veya mysqli_result), boolean given bekliyor

MySQL tablodan veri seçmek için çalışıyorum, ama aşağıdaki hata iletilerinden birini alıyorum:

() mysql_fetch_array parametre 1 kaynak olması için, verilen boolean olmasını bekliyor

ya

() mysqli_fetch_array bekliyor mysqli_result, boolean verilen parametre 1

Bu benim kod:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

CEVAP
4 HAZİRAN 2010, Cuma


Bir sorgu bu durumda mysql_* mysqli uzantısı her iki yöntem/ilgili sorgu fonksiyonları false döner çeşitli nedenlerden dolayı başarısız olabilir. Bu hata için koşul sınamak ve ona göre ele almak gerekir.

mysql_* extension:

NOT15 ** ve yaklaşan php Sürümü 7 ile kaldırılacaktır.

mysql_fetch_array geçirmeden önce $result kontrol edin. Sorgu başarısız olduğundan false olduğunu göreceksiniz. Onlarla nasıl başa Olası dönüş değerleri ve önerileriniz için mysql_query belgelerine bakın.

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

mysqli extension
usul tarzı:

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo tarzı:

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

hazırlanmış deyimi kullanarak:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

Bunlar sadece örnekler göstermeknenasıl yapıldığını (hata işleme) yapılmalıdır. Üretim kodu HTML çıktısı or die kullanmamalısın, başka (en azından) geçersiz HTML oluşturur. Ayrıca, veritabanı hata iletileri 19 **-admin olmayan kullanıcılar için görüntülenen olmamalı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Krumme1996

    Krumme1996

    21 EYLÜL 2009
  • Kyler Briskey

    Kyler Briske

    20 ŞUBAT 2011
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008