Pergunta

Eu estou tentando implementar NÃO restrição NULL na tabela de clientes que é criado como:

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);

Após isto de uma forma que eu estou passando valores e inseri-lo como:

$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')";

No entanto, se eu estou passando em branco valores dos campos, Mysql parece inseri-los? Qual pode ser o possível problema ??

Foi útil?

Solução

$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')";

Esta será:

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

E por causa de NOT NULL nada será inserido.

Outras dicas

Eu suspeito que isso é porque, em um real DBMS, em oposição ao Oracle :-), há uma distinção entre um valor em branco e um valor NULL.

cordas em branco são perfeitamente válidos para campos NOT NULL. O único valor que você não deve ser capaz de colocar em um campo NOT NULL é, cair sobre, tentando lembrar ... NULL. Sim é isso. NULO. : -)

Além Oracle tomou uma decisão há muitas luas para VARCHARs vazias tratar como nulos e ainda assombra-los (ou seria se eu não era o único que se recusou a usá-lo por causa do que problema)

.

Se você quiser que o seu código PHP para funcionar como Oracle (onde espaços em branco se tornam nulos), você vai ter que pré-processar a string, algo como (pseudo-código):

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'" +
    ")";

e assim por diante para os outros campos que podem ser NULL também. Eu só mostra como fazê-lo para $first_name.

Isso fará com que sua coluna first_name na demonstração INSERT para ser NULL ou o valor de $first_name cercado por aspas simples.

Tenha em mente todos esses campos devem ser verificados e / ou modificada a ataques de injeção SQL Prevent.

Algumas informações adicionais dos docs aqui:

http://dev.mysql.com /doc/refman/5.0/en/problems-with-null.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top