SQL Query İşleyen değil - Hayır Hata Mesajı

4 Cevap php

ORİJİNAL METİN KALDIRILACAK

OK, so I found the original problem thanks to a helpful answer. It lists "Invalid query: No database selected" as the error.

require_once ('../dir_connect.php');            

$dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
        if (!$dbc) {
            die('Could not connect: ' . mysql_error());
        }

Ben bu var, ve ben dir_connect.php dosyasında bu varsa:

/** The name of the database */
define('DB_NAME', 'unlisted_employees');

/** MySQL database username */
define('DB_USER', 'unlisted_qpass');

/** MySQL database password */
define('DB_PASSWORD', 'testpass');

/** MySQL hostname */
define('DB_HOST', 'localhost');

Ben gerçek bir veritabanı bağlantısı yapmak eklemek gereken bir şey var mı?

4 Cevap

Sen mysql_query () çağrısının dönüş değerini kontrol etmeniz gerekir.

http://php.net/manual/en/function.mysql-query.php

$result = mysql_query($query);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

Şu anda, aslında hata durumunu vurmak asla ve aslında MySQL size geri gönderiyor bu ne (varsa) hata görmezsiniz.

Ayrıca, muhtemelen sorgu takmayı yerine sadece normal dize Concatentation yapıyorsun değerleri kaçmak istiyorum. Bunu yapmazsanız, app bir SQL enjeksiyon saldırısına karşı savunmasız olabilir. İşte güvenli bir sorgu oluşturmak için nasıl:

$query = sprintf("INSERT INTO staff (name, lastname, username, password, position, department, birthmonth, birthday, birthyear, location, phone, email, street, city, state, country, zip, tags, photo) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
                mysql_real_escape_string($name),
                mysql_real_escape_string($lastname),
                mysql_real_escape_string($username),
                mysql_real_escape_string($password),
                mysql_real_escape_string($position),
                mysql_real_escape_string($department),
                mysql_real_escape_string($birthmonth),
                mysql_real_escape_string($birthday),
                mysql_real_escape_string($birthyear),
                mysql_real_escape_string($location),
                mysql_real_escape_string($phone),
                mysql_real_escape_string($email),
                mysql_real_escape_string($street),
                mysql_real_escape_string($city),
                mysql_real_escape_string($state),
                mysql_real_escape_string($country),
                mysql_real_escape_string($zip),
                mysql_real_escape_string($tags),
                mysql_real_escape_string($photo));

EDIT: Sadece başka bir cevap yorumunuzu gördüm. Zaten kaçan gibi yapıyoruz:

$birthday = mysql_real_escape_string(trim($_POST['birthday']));

sonra sorguyu oluştururken bunu kaçmak gerekmez. Muhtemelen size bir şey eksik olmadığı açıktır böylece sorgu oluşturmak anda kaçan yapmak için daha iyi bir uygulamadır.

EDIT2: Docs göre, mysql_connect () ev sahibi, kullanıcı ve parola almalı ve daha sonra (daha sonra) çağrısı doğru veritabanını almak için bir mysql_select_db yapmak gerekir.

http://www.php.net/manual/en/function.mysql-select-db.php

$dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$dbc) {
    die('Could not connect: ' . mysql_error());
}

// make foo the current db
$db_selected = mysql_select_db(DB_NAME, $dbc);
if (!$db_selected) {
    die ('Could not select database: ' . mysql_error());
}

(BTW, sizin sorunuzu düzenleyebilir ve daha sonra bu konu bulma başkalarına yararlı olabilir bu yüzden orijinal metni geri koymak gerekir!)

Sen sorguda parametreleri kaçmak için mysql_real_escape_string (veya DB motor için uygun ne olursa olsun) gibi bir şey kullanıyor olmalıdır. Ben bağlantılı belgelere göz atın. Ben PHP kullanılan beri bir süre oldu, ama birisi ahenge-in olabilecek daha iyi bir parametrelenmişse kaçan yöntemi ile.

Ancak, ana sorun tamsayı alanları içine dizeleri takıyor bu gibi görünüyor. Zip, birthmonth, doğum günü, birthyear, vb alanların değerlerini kontrol edin ... muhtemelen tek tırnak ile kaçtı olması gerekmez.

İyi şanslar!

Veritabanına bağlantı yok?

mysql_query() başarısızlık false döner ve bir uyarı değil, bir hata oluşturur.

Sadece bir metin dizesi olarak arada, !$query kadarıyla mysql ile ilgili olarak size bir şey söylemez.

Sorun burada:

if (!$query) {
    die('Invalid query: ' . mysql_error());
}

Sen sorgu hiçbir mantıklı, hangi koştu ya da değilse $query değişken karar kontrol ediyoruz. Bunun yerine mysql_query dönüş değerini toplamak ve daha sonra bunun yerine faydalanmak gerekir.

$res = mysql_query($query);
if (!$res) {
    die('Invalid query: ' . mysql_error());
}