mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows vb… 1. parametrenin kaynak olmasını bekler

Jun 04 2010

Bir MySQL tablosundan veri seçmeye çalışıyorum, ancak aşağıdaki hata mesajlarından birini alıyorum:

mysql_fetch_array () parametre 1'in kaynak olmasını bekler, verilen boole

Bu benim kodum:

$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'];
}

Yanıtlar

670 EdwardDale Jun 04 2010 at 17:19

Bir sorgu çeşitli nedenlerle başarısız olabilir, bu durumda hem mysql_ * hem de mysqli uzantısı falseilgili sorgu işlevlerinden / yöntemlerinden dönecektir . Bu hata durumunu test etmeniz ve buna göre işlemeniz gerekir.

mysql_ * uzantısı :

NOT mysql_ fonksiyonlar artık yok ve php sürümüne 7'de kaldırılmıştır.

Geçmeden $resultönce kontrol edin mysql_fetch_array. Bunun false, sorgunun başarısız olmasından kaynaklandığını göreceksiniz . mysql_queryOlası dönüş değerleri ve bunlarla nasıl başa çıkılacağı konusunda öneriler için belgelere 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 uzantısı
yordamsal stili :

$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ış bir ifade 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 ) {
      ...

Bu örnekler , nasıl yapılacağını değil, yalnızca ne yapılması gerektiğini (hata işleme) gösterir. Üretim kodu or dieHTML çıktısını alırken kullanılmamalıdır , aksi takdirde (en azından) geçersiz HTML oluşturur. Ayrıca, veritabanı hata mesajları, çok fazla bilgi açığa çıkardığı için yönetici olmayan kullanıcılara gösterilmemelidir .

166 JohnConde Jul 27 2012 at 00:00

Bu hata mesajı, sorgunuzda başarısız olmasına neden olan bir hata olduğunda görüntülenir. Kullanırken kendini gösterecek:

  • mysql_fetch_array/mysqli_fetch_array()
  • mysql_fetch_assoc()/mysqli_fetch_assoc()
  • mysql_num_rows()/mysqli_num_rows()

Not : Bu hata yok değil hiçbir satır Sorgunuzun etkilenen eğer görünür. Yalnızca geçersiz sözdizimine sahip bir sorgu bu hatayı oluşturur.

Sorun Giderme Adımları

  • Geliştirme sunucunuzun tüm hataları görüntüleyecek şekilde yapılandırıldığından emin olun. Eğer dosya üstündeki veya yapılandırma dosyasında bu koyarak bunu yapabilirsiniz: error_reporting(-1);. Herhangi bir sözdizimi hatanız varsa, bu onları size gösterecektir.

  • Kullanın mysql_error(). mysql_error()Sorgunuzu gerçekleştirirken MySQL'in karşılaştığı tüm hataları bildirir.

    Örnek kullanım:

    mysql_connect($host, $username, $password) or die("cannot connect"); mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name"; $result = mysql_query($sql); if (false === $result) {
        echo mysql_error();
    }
    
  • Sorgunuzu MySQL komut satırından veya phpMyAdmin gibi bir araçtan çalıştırın . Sorgunuzda bir sözdizimi hatası varsa, bu size ne olduğunu söyleyecektir.

  • Alıntılarınızın doğru olduğundan emin olun. Sorgunun veya bir değerin etrafındaki eksik bir alıntı, bir sorgunun başarısız olmasına neden olabilir.

  • Değerlerinizden kaçtığınızdan emin olun. Sorgunuzdaki alıntılar bir sorgunun başarısız olmasına (ve ayrıca sizi SQL enjeksiyonlarına açık bırakmasına) neden olabilir. Girişinizden mysql_real_escape_string()çıkmak için kullanın .

  • Karıştırma mysqli_*ve mysql_*işlev yapmadığınızdan emin olun . Aynı şey değildirler ve birlikte kullanılamazlar. (Eğer birini veya diğerini seçecekseniz mysqli_*. Nedenini öğrenmek için aşağıya bakın.)

Diğer ipuçları

mysql_*yeni kod için işlevler kullanılmamalıdır. Artık korunmuyorlar ve topluluk kullanımdan kaldırma sürecine başladı . Bunun yerine hazırlanmış ifadeleri öğrenmeli ve PDO ya da MySQLi kullanmalısınız . Karar veremiyorsanız, bu makale seçim yapmanıza yardımcı olacaktır. Öğrenmek istiyorsanız, işte size iyi bir PDO öğreticisi .

112 nik Jun 04 2010 at 17:24

Burada oluşan hata, tek tırnakların ( ') kullanılmasından kaynaklanmıştır. Sorgunuzu şu şekilde girebilirsiniz:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

mysql_real_escape_stringSQL enjeksiyonunu önlemek için kullanılıyor . PHP'nin yükseltilmiş sürümü (PHP 5.5.0 ve sonrası) için MySQLi veya PDO_MYSQL uzantısını kullanmalıyız, ancak daha eski sürümler mysql_real_escape_stringiçin hile yapacak.

60 2ndkauboy Jun 04 2010 at 17:31

Gibi scompt.com açıkladı , sorgu başarısız olabilir. Sorgunun hatasını veya doğru sonucu almak için bu kodu kullanın:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query(" SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'
");

if($result) { while($row = mysql_fetch_array($result)) { echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

Daha fazla bilgi için belgeleremysql_query() bakın .

Gerçek hata, değişken $usernameayrıştırılmaması için tek tırnaklardı . Ancak mysql_real_escape_string($username)SQL enjeksiyonlarından kaçınmak için gerçekten kullanmalısınız .

52 MatteoRiva Jun 04 2010 at 17:22

Alıntılar yazın $username. Sayısal değerlerin aksine dize değerleri tırnak içine alınmalıdır.

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

Ayrıca, LIKEjoker karakter kullanmıyorsanız koşulu kullanmanın bir anlamı yoktur : =yerine tam eşleme kullanmanız gerekiyorsa LIKE.

42 yasin Apr 25 2012 at 12:14

Lütfen seçilen veritabanının bazı zamanlar veritabanı seçilmediği için olmadığını kontrol edin

Kontrol

mysql_select_db('database name ')or DIE('Database name is not available!');

MySQL sorgusundan önce ve ardından bir sonraki adıma geç

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

f($result === FALSE) {
    die(mysql_error());
40 Chaitannya Jun 04 2010 at 18:28

Kodunuz böyle bir şey olmalı

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query; $result = mysql_query($query); if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

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

Bunu yaptıktan sonra, ekranda yazdırılan sorguyu alırsınız. Bu sorguyu sunucunuzda deneyin ve istenen sonuçları verip vermediğine bakın. Çoğu zaman hata sorgudadır. Kodun geri kalanı doğru.

34 derokorian Jan 08 2012 at 10:48
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

Dizeyi tek tırnak kullanarak tanımlarsınız ve PHP tek tırnakla ayrılmış dizeleri ayrıştırmaz. Değişken enterpolasyon elde etmek için çift tırnak VEYA dize birleştirme (veya bunların bir kombinasyonunu) kullanmanız gerekecektir. Görmekhttp://php.net/manual/en/language.types.string.php daha fazla bilgi için.

Ayrıca mysql_query'nin geçerli bir sonuç kaynağı döndürdüğünü kontrol etmelisiniz, aksi takdirde fetch_ *, num_rows, vb. Bir sonuç olmadığı için sonuç üzerinde çalışmayacaktır! IE:

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

if( $result === FALSE ) { trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR); } else { while( $row = mysql_fetch_array($result) ) { echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php daha fazla bilgi için.

33 EnisP.Aginić Apr 23 2013 at 16:34

Bu sorgu çalışmalıdır:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

Sorun tek tırnaktır, bu nedenle sorgunuz başarısız olur ve FALSE döndürür ve WHILE döngünüz çalıştırılamaz. % Kullanmak, dizenizi içeren herhangi bir sonucu eşleştirmenize izin verir (Bir Metin- $ kullanıcıadı-Bir Metin gibi).

Bu basitçe sorunuza bir cevaptır, diğer gönderilerde bahsedilenleri uygulamalısınız: hata işleme, kaçış dizeleri kullanın (kullanıcılar alana herhangi bir şey yazabilir ve bunun rastgele kod olmadığından emin olmalısınız), yerine PDO kullanın mysql_connect şimdi sınırlandırılmıştır.

27 DipPokhrel May 10 2013 at 20:46
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

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

Bazen sorguyu şu şekilde gizleyerek @mysql_query(your query);

27 kolexinfos Sep 06 2012 at 22:32

Buradaki her şeyi denediyseniz ve işe yaramazsa, MySQL veritabanı harmanlamanızı kontrol etmek isteyebilirsiniz. Benimki bir İsveç harmanlamasına ayarlandı. Sonra olarak değiştirdim utf8_general_cive her şey vitese takıldı.

25 Gears.of.Codes Jul 21 2013 at 23:20
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4"; while( $data = mysql_fetch_array($query)) { echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

WHERE sorgusu kullanmak yerine, bu ORDER BY sorgusunu kullanabilirsiniz. Bir sorgu kullanmak için bundan çok daha iyidir.

Bu sorguyu yaptım ve parametre veya boole gibi herhangi bir hata almıyorum.

25 AmjadOmari Feb 25 2013 at 20:33

Bunu deneyin, işe yaramalı, aksi takdirde sorununuzu belirtmek için hatayı yazdırmanız gerekir

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con); while($row = mysql_fetch_array($result)) { echo $row['FirstName'];
}
21 asim-ishaq May 05 2013 at 01:57

Bunun iki nedeni olabilir:

  1. Mysql_query işlevini çağırmadan önce veritabanına bağlantıyı açtınız mı? Bunu kodunuzda göremiyorum. Sorguyu yapmadan önce mysql_connect kullanın. Görmekphp.net/manual/en/function.mysql-connect.php

  2. $ Username değişkeni tek bir tırnak dizesi içinde kullanılır, bu nedenle değeri sorgu içinde değerlendirilmez. Sorgu kesinlikle başarısız olacaktır.

Üçüncüsü, sorgu yapısı SQL enjeksiyonuna eğilimlidir . Bu güvenlik tehdidini önlemek için hazırlanmış ifadeler kullanabilirsiniz.

19 ravi May 30 2013 at 14:40

Aşağıdaki kodu deneyin. İyi çalışabilir.

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

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
15 user2835116 Oct 01 2013 at 20:48

Senin config.php. Ben de aynı sorunu yaşadım. Kullanıcı adını ve parolayı doğrulayın ve ayrıca sql select, yapılandırma ile aynı addır.

15 MKD Apr 16 2015 at 13:53

Sınırlandırılmış mysql_ * işlevini kullanmayın (php 5.5'te anlatılanlar php 7'de kaldırılacaktır). ve bunu mysqli veya pdo ile yapabilirsiniz

işte tam seçim sorgusu

<?php
$servername = "localhost"; $username = "username";
$password = "password"; $dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql); if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>
14 JanakPrajapati Sep 19 2013 at 15:39
<?php
    $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'];
    }
?>

Ve benzersiz bir kullanıcı adına sahip bir kullanıcı varsa, bunun için "=" kullanabilirsiniz. Beğenmeye gerek yok.

Sorgunuz şöyle olacaktır:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");
14 Durairaj Oct 30 2013 at 12:11

MySQL sorgusundan önce bir bağlantı dizesi değişkeni ekleyin. Örneğin, $conntbu kodda:

$results = mysql_query($connt, "SELECT * FROM users");
11 DennisKiptugen Apr 07 2015 at 01:01
<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>
11 SuReSh Apr 28 2015 at 13:05

Bunu dene

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

if($result){ while($row = mysqli_fetch_array($result)) { echo $row['FirstName'];
}
}
11 JayBlanchard Aug 06 2015 at 03:53

Ne zaman alırsan ...

"Uyarı: mysqli_fetch_object () parametre 1'in mysqli_result olmasını bekler, boole değeri verilir"

... bunun nedeni büyük olasılıkla sorgunuzla ilgili bir sorun olmasıdır. prepare()Veya query()kudreti dönüş FALSE(Boole), ancak bu genel başarısızlık mesajı ipuçları yolunda çok teşekkür bırakmaz. Sorgunuzda neyin yanlış olduğunu nasıl anlarsınız? Sen sor !

Her şeyden önce, hata raporunun açık ve görünür olduğundan emin olun: Bu iki satırı dosyalarınızın en üstüne açılış <?phpetiketinizin hemen sonrasına ekleyin :

error_reporting(E_ALL);
ini_set('display_errors', 1);

Hata raporlamanız php.ini'de ayarlanmışsa, bunun için endişelenmenize gerek kalmayacaktır. Sadece hataları nazikçe ele aldığınızdan emin olun ve sorunların gerçek nedenini kullanıcılarınıza asla açıklamayın. Gerçek sebebi halka açıklamak, sitelerinize ve sunucularınıza zarar vermek isteyenler için altın kazınmış bir davet olabilir. Tarayıcıya hata göndermek istemiyorsanız, web sunucusu hata günlüklerinizi her zaman izleyebilirsiniz. Günlük konumları sunucudan sunucuya farklılık gösterecektir, örneğin Ubuntu'da hata günlüğü genellikle adresinde bulunur /var/log/apache2/error.log. Bir Linux ortamında hata günlüklerini inceliyorsanız, tail -f /path/to/loghataları gerçek zamanlı olarak meydana geldiklerinde veya siz onları oluştururken görmek için bir konsol penceresinde kullanabilirsiniz.

Standart hata raporlamasından uzaklaştığınızda, veritabanı bağlantınıza hata kontrolü eklemek ve sorgular size devam eden sorunlar hakkında çok daha fazla ayrıntı verecektir. Sütun adının yanlış olduğu bu örneğe bir göz atın. İlk olarak, genel önemli hata mesajını döndüren kod:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?"; $query = $mysqli->prepare($sql)); // assuming $mysqli is the connection $query->bind_param('s', $definition); $query->execute();

Hata geneldir ve neler olup bittiğini çözmede size pek yardımcı olmaz.

Birkaç satır daha kodla, sorunu hemen çözmek için kullanabileceğiniz çok ayrıntılı bilgiler alabilirsiniz . prepare()İfadenin doğruluğunu kontrol edin ve eğer iyiyse, bağlayıcılığa ve uygulamaya geçebilirsiniz.

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?"; if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection $query->bind_param('s', $definition); $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
    // handle error
}

Bir sorun varsa, sizi doğrudan soruna götüren bir hata mesajı verebilirsiniz. Bu durumda footabloda bir sütun yoktur , problemi çözmek önemsizdir.

İsterseniz, bu denetimi bir işleve veya sınıfa dahil edebilir ve hataları daha önce belirtildiği gibi incelikle işleyerek genişletebilirsiniz.

9 Noname Apr 29 2013 at 17:24

İlk önce, veri tabanına olan bağlantınızı kontrol edin. Başarıyla bağlanmış mı yoksa bağlanmamış mı?

Bittiyse, bundan sonra bu kodu yazdım ve iyi çalışıyor:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) { $Q1mrks = $_GET['q1mrks']; $marks = $_GET['marks']; $qt1 = $_GET['qt1']; $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1' "); $row = mysql_fetch_assoc($qtype_qry); $qcode = $row['quetype_code']; $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode' ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query(" SELECT * FROM s_question WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks "); while ($qrow = mysql_fetch_array($sq_qry)) { $qm = $qrow['marks'] . "<br />"; $total += $qm . "<br />"; } echo $total . "/" . $marks;
}
9 A.Aleem11 Oct 13 2014 at 22:07

Sorgunuzu Çalıştırmadan Önce db_close () Kullanarak Veritabanını Kapatmadığınızdan Emin Olun:

Bir komut dosyasında birden fazla sorgu kullanıyorsanız, sorguları veya veritabanı bağlantısını içeren diğer sayfaları dahil ediyor olsanız bile, veritabanı bağlantınızı kapatan herhangi bir yerde db_close () kullanmanız mümkün olabilir, bu nedenle bu hatayı senaryolarınızda yapmamak.

7 user1012181 Nov 08 2014 at 20:36

Kontrol ederken herhangi bir MySQL Hatanız yoksa, veritabanı tablonuzu doğru şekilde oluşturduğunuzdan emin olun. Bu bana oldu. İstenmeyen virgül veya tırnak işareti olup olmadığına bakın.

6 Omdev Jul 06 2013 at 20:02

Önce bağlantınızı kontrol edin.

Ardından, veritabanından tam değeri almak istiyorsanız şunu yazmalısınız:

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

Ya da LIKEdeğerin türünü getirmek istiyorsanız şunu yazmalısınız:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
5 user28864 Dec 16 2013 at 03:27

Ayrıca $result, getirme dizisini çalıştırmadan önce bu şekilde başarısız olup olmadığını da kontrol edebilirsiniz.

$username = $_POST['username']; $password = $_POST['password']; $result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username'); if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}
3 EngrZardari Jan 21 2014 at 11:21

Genellikle veritabanı bağlantınız başarısız olduğunda bir hata oluşur, bu nedenle veritabanınızı bağladığınızdan veya veritabanı dosyasını dahil ettiğinizden emin olun.

include_once(db_connetc.php');

VEYA

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error()); //Select database mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE `id` ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) { while ($row = mysql_fetch_array($employee_data)){ echo $row['emp_name'];
    } // end of while loop
} // end of if
  • En iyi uygulama, sorguyu sqlyog'da çalıştırmak ve ardından sayfa kodunuza kopyalamaktır.
  • Sorgunuzu her zaman bir değişkende saklayın ve ardından o değişkeni yankılayın. O zaman geç mysql_query($query_variable);.
2 PaulSpiegel Apr 07 2019 at 05:18

Geleneksel olarak PHP, kötü uygulamalara ve koddaki hatalara toleranslıdır, bu da hata ayıklamayı oldukça zorlaştırır. Bu özel durumda sorunun hem olmasıdır mysqli ve PDO bir sorgu başarısız oldu ve sadece döndüğünüzde varsayılan olarak söylemezler FALSE. (Depricated mysql eklentisi hakkında konuşmayacağım . Hazırlanan ifadeler için destek , PDO ya da mysqli'ye geçme nedenidir .) Ancak PHP'nin varsayılan davranışını, bir sorgu başarısız olduğunda her zaman istisnalar atacak şekilde değiştirebilirsiniz .

For PDO : Kullanım$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

error_reporting(E_ALL);

$pdo = new PDO("mysql:host=localhost;dbname=test", "test","");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $result = $pdo->query('select emal from users'); $data = $result->fetchAll();

Bu size aşağıdakileri gösterecektir:

Önemli hata: 'SQLSTATE [42S22] mesajıyla yakalanmamış istisna' PDOException ': Sütun bulunamadı: 1054 E: \ htdocs \ test \ mysql_errors \ pdo.php satırında' alan listesi 'içinde 1054 Bilinmeyen sütun' emal '

PDOException: SQLSTATE [42S22]: Sütun bulunamadı: 1054 E: \ htdocs \ test \ mysql_errors \ pdo.php satır 8'deki 'alan listesinde' bilinmeyen 'emal' sütunu

Gördüğünüz gibi, size tam olarak, sorguda neyin yanlış olduğunu ve kodunuzda onu nerede düzeltmeniz gerektiğini söyler.

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);Sen olmadan alacaksın

Ölümcül hata: 9. satırdaki E: \ htdocs \ test \ mysql_errors \ pdo.php içindeki boolean üzerinde fetchAll () üye işlevine çağrı

İçin mysqli : Kullanımmysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'test', '', 'test'); $result = $mysqli->query('select emal from users'); $data = $result->fetch_all();

Alacaksın

Önemli hata: E: \ htdocs \ test \ mysql_errors \ mysqli.php satır 8'de 'alan listesi' içinde 'Bilinmeyen sütun' emal 'mesajı ile yakalanmamış istisna' mysqli_sql_exception '

mysqli_sql_exception: 8. satırda E: \ htdocs \ test \ mysql_errors \ mysqli.php içindeki 'alan listesi'nde bilinmeyen' emal 'sütunu

Sensiz mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);sadece

Önemli hata: 10. satırda E: \ htdocs \ test \ mysql_errors \ mysqli.php içindeki boolean üzerinde fetch_all () üye işlevine çağrı

Elbette MySQL hatalarını manuel olarak kontrol edebilirsiniz. Ancak, her defasında bir yazım hatası yaptığımda - veya daha kötüsü - veritabanını her sorgulamak istediğimde bunu yapmak zorunda kalsaydım delirirdim.

1 Riteshdjoshi Apr 28 2014 at 15:52

Bu kodu deneyin, iyi çalışıyor

gönderi değişkenini değişkene atayın

   $username = $_POST['uname'];

   $password = $_POST['pass'];

  $result = mysql_query('SELECT * FROM userData WHERE UserName LIKE $username');

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