He creado una tabla con NOT NULL
restricciones en algunas columnas en MySQL. Luego en PHP escribí un script para insertar datos, con una consulta de inserción. Cuando omito una de las columnas NOT NULL
en esta instrucción de inserción, esperaría un mensaje de error de MySQL, y esperaría que mi secuencia de comandos fallara. En cambio, MySQL inserta cadenas vacías en los campos NOT NULL
. En otros campos omitidos, los datos son NULL, lo cual está bien. ¿Podría alguien decirme qué hice mal aquí?MySQL ignora la restricción NOT NULL
estoy usando esta tabla:
CREATE TABLE IF NOT EXISTS tblCustomers (
cust_id int(11) NOT NULL AUTO_INCREMENT,
custname varchar(50) NOT NULL,
company varchar(50),
phone varchar(50),
email varchar(50) NOT NULL,
country varchar(50) NOT NULL,
...
date_added timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (cust_id)
) ;
Y esta instrucción de inserción:
$sql = "INSERT INTO tblCustomers (custname,company)
VALUES ('".$customerName."','".$_POST["CustomerCompany"]."')";
$res = mysqli_query($mysqli, $sql);
o el uso de variables de enlace:
$stmt = mysqli_prepare($mysqli, "INSERT INTO tblCustomers (custname,company, email, country) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'ssss', $customerName, $_POST["CustomerCompany"], $_POST["CustomerEmail"], $_POST["AddressCountry"]);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
¡El modo estricto lo hizo! ¡Gracias! Al menos cuando omito un valor, el registro no se inserta. Cuando $ _POST ["CustomerEmail"] está vacío, el registro aún se inserta, con una cadena vacía, pero ese no era el alcance de esta pregunta. La búsqueda para evitar la inserción de una cadena vacía continúa. – Whakkee
Para responder a su segunda pregunta, entonces, debe usar el enlace de parámetros, como se explica en otras respuestas, pero piense en esto. No necesitas '.' operador concat para generar consultas cuando se utilizan comillas dobles. Puede hacer esto "VALUES ($correoelectrónicode cliente)". Por lo tanto: if (! Empty ($ _ POST ['CustomerEmail']) {$ customerEmail = "'$ _POST [' CustomerEmail ']'";} else {$ customerEmail = "NULL";} –
Gracias por el consejo, ya utilicé el enlace de parámetros, cuando Mark Byers lo publicó, cambié mi código y ... ya comprobé en el lado php si está vacío o no. Estoy buscando una verificación de la base de datos, como una restricción de verificación que utilicé con bases de datos Oracle Para ser sincero: no necesitaría una restricción de verificación en Oracle, ya que una cadena vacía se trata como NULL en Oracle. Una cadena vacía es tan mala para mí como NULL en este caso, por lo que cuando aún puedo insertar una vacía cadena, la restricción NOT NULL es bastante inútil para mí. Tal vez debería publicar una nueva pregunta sobre esto. – Whakkee