Ne bu sorgu ile yanlış?

2 Cevap php

Biri bana yardımcı olur:

$query = "INSERT INTO tbl_users(user, password, password_def, userid, level
          , regdate, lastdate, email) VALUES('$username', sha1('$password')
          , sha1('$password'), '$userid', '0', NOW(), NOW(), '$email');";

$userid bir ramdon md5 id.

Bana bu hata veriyor:

posttokenError: Account not created You have an error in your SQL syntax; 
    check the manual that corresponds to your MySQL server version for the right
    syntax to use near '\'esck21\', sha1(\'password\'), sha1(\'password\'), 
    \'14bd25cbe111c2975232b33ee8c2' at line 1

I think I'm gonna have a heart attack. Thanks.

2 Cevap

Böyle addslashes($query) veya mysql_real_escape_string($query) olarak, entire query işlevini kaçan çeşit çağrı olabilir gibi bir hata mesajı ile bakılırsa, o görünüyor. Gerçekten ne yapmak istediğinizi sadece değişkenler içinde olan tırnak kaçış olduğunda, every quote in the query kaçış olacaktır.

Bu durumda ise, o zaman yerine böyle bir şey yapmak istiyorum:

$query = "INSERT INTO tbl_users(user, password, password_def, userid, level,
regdate,lastdate, email) VALUES('".mysql_real_escape_string($username)."',
sha1('".mysql_real_escape_string($password)."'), 
sha1('".mysql_real_escape_string($password)."'), 
'".mysql_real_escape_string($userid)."', '0', 
NOW(), NOW(), '".mysql_real_escape_string($email)."')";

Yani düzgün yanlışlıkla sorgunun kalanını kaçan olmadan veri kaçış olacaktır. Bunu yaptıktan sonra, kaçan diğer formlar aracılığıyla bir bütün dize olarak $query koşmak yok.

Sen backtick gerekir (`) şifre alanı:

$query = "INSERT INTO `tbl_users` (`user`, `password`, `password_def`, `userid`
              , `level`, `regdate`, `lastdate`, `email`) 
          VALUES('$username', 'sha1($password)', 'sha1($password)', '$userid'
              , '0', NOW(), NOW(), '$email');";

Her zaman alanları, tabloları ve veritabanları backtick gerekir.

Bir şey daha: pay attention to SQL Injections , use mysql_real_escape_string().


Ben conviced ediyorum bazı tartışma sonra sorun alıntı kullanımı ile yatıyor, zombat cevap kontrol.