PHP yanlış dönen değil mysql_query

6 Cevap php

Sadece PHP öğrenme ve bazı sorun mysql_query anlamakta yaşıyorum. Benim anlayış mysql_query kaydı bulunamadı değilse FALSE dönmek gerekiyordu olmasıdır. Ancak, çünkü her zaman true döndürür görünüyor "BULUNDU!" Her zaman sonuç:

$q = "SELECT * FROM users WHERE username = 'doesnotexist'";

$r = mysql_query($q);

if (!$q) {
	echo "<p>NOT FOUND!</p>";
} else {
	echo "<p>FOUND!</p>";
}

mysql_close();

Eğer tutabilecek herhangi bir ışık için şimdiden teşekkür ederiz.

6 Cevap

mysql_query bir hata varsa false döndürür, hiçbir sonuç bulunamadı eğer. Belgeleri:

For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

mysql_query() will also fail and return FALSE if the user does not have permission to access the table(s) referenced by the query.

Eğer sorgu tarafından döndürülen sonuç alınamadığı takdirde, görmek kullanmak için kontrol etmek istiyorsanız, mysql_num_rows() . Belgelerine bakın:

Use mysql_num_rows() to find out how many rows were returned for a SELECT statement or mysql_affected_rows() to find out how many rows were affected by a DELETE, INSERT, REPLACE, or UPDATE statement.

Bunun yerine '$ r' değişkeni (mysql sonuç) değişken '$ q' (SQL deyimi) kontrol edilir

Sizin 'if (!$q)' olmalı 'if (!$r)' sanırım.

if (empty($r)) {
        echo "<p>NOT FOUND!</p>";
} else {
        echo "<p>FOUND!</p>";
}

Aşağıdakiler boş olarak kabul edilir:

"" (an empty string)
0 (0 as an integer)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

Ok i bu cevabı çalıştım.

Bu bir rekor geçerli olup olmadığını size söyler bir veritabanını güncellemek için sürümüdür.

$updatequery = "update `mydb` set `userid` = '$arr[0]', `name` = '$arr[1]' where `age` = '$arr[2]'";

$updatequeryresult= mysql_query($updatequery);

$howmanyupdatedrecords = mysql_affected_rows();

if ($howmanyupdatedrecords == 0) {
echo("The update didn't update any records as no one matched an age of " .$arr[2]");
}

Yaş sahip bir mesaj yok yaş gösteren görüntülenir DB yoksa bu, belirtilen yaş ile tüm insanları güncellenmesi DB yinelemenize.Ölçütlere. Ayrıca bir şey veri zaten güncellendi ediliyor ne eşleşirse mysql sorgu kaydını maçları bile, kayıt güncelleme olmaz, unutmayın. Bu komut maç yapmış insanlar var olsa bile "kimse bir yaş eşleştirilmiş" dönmesine neden olur. Sadece mysql bir hata özellik olabilir. Ben bunu söyledim gibi yapıyor rahatsız değil kendi üzerine almalıdır neden görmüyorum bilgilerini güncellemek için MySQL söyledi. ;)

Bu işe yaramazsa, bu deneyin:

<?php
$q = "SELECT * FROM users WHERE username = 'doesnotexist'";
$r = mysql_query($q);
if (!mysql_num_rows($r) >= 1) {
        echo "<p>NOT FOUND!</p>";
} else {
        echo "<p>FOUND!</p>";
}
mysql_close();
?>