MySql NOT NULL kısıtlaması ayıklayıcının çalışma

3 Cevap php

Ben oluşturulan müşteri tabloda NULL kısıtlaması uygulamak çalışıyorum:

CREATE TABLE CUSTOMER(
     cust_id INT(5) NOT NULL AUTO_INCREMENT, 
     PRIMARY KEY(cust_id),
     first_name VARCHAR(25) NOT NULL,
     last_name VARCHAR(25) NOT NULL,
     email VARCHAR(25) NOT NULL,
     password VARCHAR(25) NOT NULL,
     gender VARCHAR(1) NOT NULL,
     city VARCHAR(25) NOT NULL,
     dob DATE NOT NULL,
     pin INT NOT NULL);

Bir formdan sonra bu i değerleri geçen ve bunu gibi ekleme ediyorum:

$sql= "INSERT INTO customer(first_name,last_name,email,password,gender,city,dob,pin) VALUES('$first_name','$last_name','$email_add','$password','$gender','$city','$DOB','$pin')";

I alanlar boş değerleri geçirerek Ancak, Mysql bunları eklemek gibi görünüyor? Ne mümkün sorun olabilir?

3 Cevap

$sql= "INSERT INTO customer(first_name,last_name,email,password,gender,city,dob,pin) VALUES('$first_name',".
($last_name?"'".$last_name."'":"NULL").
", '$email_add','$password','$gender','$city','$DOB','$pin')";

Bu olacak:

VALUES('ahm',NULL,'email@a.ddr' ...

Ve çünkü NOT NULL şey eklenecektir.

Oracle :-) aksine gerçek bir DBMS, boş bir değer ve bir NULL değeri arasında bir ayrım olduğunu, çünkü bu şüpheli.

Boş dizeleri NOT NULL alanları için mükemmel geçerlidir. Bir NOT NULL alanda koymak mümkün olmamalıdır tek değer, null ... hatırlamaya çalışıyorum, üzerine asar. Evet, işte bu. NULL. :-)

Kenara: Oracle boş değerlere boş VARCHARS tedavi etme kararı birçok aylar önce yapılan ve (ben çünkü sorunun kullanmayı reddetti tek değildi ya da eğer o olur) hala akıllarından.

Eğer PHP kodu (boşluklar NULL olur) Oracle gibi çalışmak istiyorsanız, ön-işlem zorunda gidiyoruz dize, (pseudo-code) gibi bir şey:

if $first_name == "":
    $first_name = "NULL"
else:
    $first_name = "'" + $first_name + "'"
: : :
$sql= "INSERT INTO customer(" +
    "first_name," +
    "last_name," +
    "emailpassword," +
    "gender," +
    "city," +
    "dob," +
    "pin" +
    ") VALUES (" + 
        $first_name + "," +
        "'$last_name'" + "," +
        "'$email_add'" + "," +
        "'$password'" + "," +
        "'$gender'" +
        ",'$city'" + "," +
        "'$DOB'" + "," +
        "'$pin'" +
    ")";

ve böylece de boş olabilir, diğer alanlar için. Ben sadece $first_name için bunu yapmak için nasıl gösterilir ettik.

İşte INSERT deyimindeki first_name sütun ya NULL veya $first_name tek tırnak çevrili değeri neden olacaktır.

Akılda tüm bu alanların kontrol ve / veya SQL enjeksiyon saldırıları önlemek için modifiye edilmelidir tutun.