mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows vb… 1. parametrenin kaynak olmasını bekler
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
Bir sorgu çeşitli nedenlerle başarısız olabilir, bu durumda hem mysql_ * hem de mysqli uzantısı false
ilgili 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 .
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_*
vemysql_*
işlev yapmadığınızdan emin olun . Aynı şey değildirler ve birlikte kullanılamazlar. (Eğer birini veya diğerini seçeceksenizmysqli_*
. 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 .
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_string
SQL 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_string
için hile yapacak.
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 $username
ayrış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 .
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, LIKE
joker karakter kullanmıyorsanız koşulu kullanmanın bir anlamı yoktur : =
yerine tam eşleme kullanmanız gerekiyorsa LIKE
.
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());
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.
$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.
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.
$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);
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_ci
ve her şey vitese takıldı.
$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.
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'];
}
Bunun iki nedeni olabilir:
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örmek
php.net/manual/en/function.mysql-connect.php
$ 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.
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'];
}
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.
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();
?>
<?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."'");
MySQL sorgusundan önce bir bağlantı dizesi değişkeni ekleyin. Örneğin, $connt
bu kodda:
$results = mysql_query($connt, "SELECT * FROM users");
<?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'];
}
?>
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'];
}
}
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ış <?php
etiketinizin 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/log
hataları 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 foo
tabloda 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.
İ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;
}
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.
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.
Ö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 LIKE
değerin türünü getirmek istiyorsanız şunu yazmalısınız:
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
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'];
}
}
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);
.
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.
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'];
}
}