Ich habe eine Tabelle mit NOT NULL
Einschränkungen für einige Spalten in MySQL erstellt. Dann schrieb ich in PHP ein Skript zum Einfügen von Daten mit einer Einfügeabfrage. Wenn ich eine der NOT NULL
Spalten in dieser Einfügeanweisung weglasse, würde ich eine Fehlermeldung von MySQL erwarten, und ich würde erwarten, dass mein Skript fehlschlägt. Stattdessen fügt MySQL leere Zeichenfolgen in die Felder NOT NULL
ein. In anderen weggelassenen Feldern sind die Daten NULL, was in Ordnung ist. Könnte mir jemand sagen, was ich hier falsch gemacht habe?MySQL ignoriert die Bedingung NOT NULL
Ich verwende diese Tabelle:
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)
) ;
Und dieses Insert-Anweisung:
$sql = "INSERT INTO tblCustomers (custname,company)
VALUES ('".$customerName."','".$_POST["CustomerCompany"]."')";
$res = mysqli_query($mysqli, $sql);
Oder mit Bind-Variablen:
$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);
Der strikte Modus hat es geschafft! Vielen Dank! Zumindest wenn ich einen Wert weglasse, wird der Datensatz nicht eingefügt. Wenn $ _POST ["CustomerEmail"] leer ist, wird der Datensatz immer noch mit einer leeren Zeichenfolge eingefügt, aber das war nicht der Bereich dieser Frage. Die Suche nach dem Einfügen einer leeren Zeichenfolge wird fortgesetzt. – Whakkee
Um Ihre zweite Frage zu beantworten, sollten Sie die Parameterbindung verwenden, wie in anderen Antworten erklärt, aber denken Sie darüber nach. Du brauchst kein '.' Concat-Operator zum Erstellen einer Abfrage, wenn doppelte Anführungszeichen verwendet werden. Sie können dies "VALUES ($ customerEmail)" tun. Deshalb: if (! Leer ($ _ POST ['CustomerEmail']) {$ customerEmail = '' $ _POST ['CustomerEmail'] '";} else {$ customerEmail =" NULL ";} –
Danke für den Hinweis, ich schon benutzte Parameterbindungen, als Mark Byers es gepostet habe ich meinen Code geändert, und ... Ich überprüfe bereits auf der PHP-Seite, ob es leer ist oder nicht.Ich suche nach einer Datenbankprüfung, wie eine Prüfbeschränkung, die ich mit Oracle-Datenbanken verwendet habe Um ehrlich zu sein: Ich würde keine Prüfbedingung in Oracle brauchen, da eine leere Zeichenkette in Oracle als NULL behandelt wird Eine leere Zeichenkette ist in diesem Fall genauso schlecht wie NULL, also wenn ich noch eine leere einfügen kann string, die NOT NULL-Einschränkung ist für mich ziemlich nutzlos, vielleicht sollte ich eine neue Frage dazu stellen. – Whakkee