Benim php / SQL deyimi ile yanlış anlamaya olamaz

4 Cevap php

Yani bu muhtemelen bir aptal acemi bir soru, ama ben ona bakarak oldum ve onu anlamaya olamaz. Arka plan biraz: Sadece bir web uygulama yapma pratik, sayfa 1 bir form kullanıcıdan bazı değerleri alır, DB bağlanmak ve ilgili tabloları doldurmak için kod içeren bir sonraki sayfada onları nakleder.

Ben başarıyla DB bağlantı kurmak, burada sorgu içeren kod:

$conn->query("SET NAMES 'utf9'");         

$query_str = "INSERT INTO 'qa'.'users' ('id', 'user_name','password' ,'email' ,'dob' ,'sx') VALUES (NULL, $username, $password, $email, $dob, $sx);";

$result = @$conn->query($query_str);

Burada döndürülen hata var: Insert sorgusu başarısız oldu: Eğer SQL sözdizimi bir hata var; Yakın'' qa kullanmak için doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol edin. 'kullanıcıların' ('id', 'user_name', 'şifre', 'e-posta', 'dob', 's' at hattı 1

Şimdiden teşekkürler!

4 Cevap

PHP MySQL yaptım çünkü değişti sürece, ters tırnakların (`) ile değil kesme (') db / sütun / escape tablo isimleri.

İyi bir genel sorun-çekim tekniği veritabanına başka bir arayüz üzerinden sorgu çalışması yapmaktır. Örneğin, phpMyAdmin. Orada çalışıyorsa, ileriye dönük bazı güven var. ya da SQL düzeltmek için nasıl bulabilirsiniz. (PHP için hazır bir dize içine SQL dönüştürmek çünkü phpMyAdmin kullanışlıdır.)

Bunun yerine (') ve (`) bir ters tırnak ile sütun adlarını kaçmak gerekir

Ayrıca düzgün de eklediğiniz gerçek değerleri (tek bir alıntı kullanmak) kaçmak gerekiyor

OMG tek bir doğru cevap

$query_str = "
INSERT INTO `qa`.`users` (`id`, `user_name`,`password` ,`email` ,`dob` ,`sx`) 
VALUES (NULL, '$username', '$password', '$email', '$dob', '$sx')";

tanımlayıcılar ters tırnakların ile aktarılıyor, while dizeleri kesme ile aktarılıyor!

ve ben, yani sorgu içine koyarak ÖNCE mysql_real_escape dize ile tüm değişkenleri geçti umut:

$username = mysql_real_escape string($username);

ve benzeri