Der richtige Weg zum einfügen einer NULL in eine Datenbank mit CodeIgniter
Habe ich ExtJS post-Daten aus einem combofield zu CodeIgniter. CodeIgniter liest die gesendeten Daten und führt db->einfügen ein update der mssql-Datenbank.
Ist das problem wenn der Benutzer nicht wählen, eine Auswahl aus der combobox ist es geschickt, um CodeIgniter als nichts, Codeignighter liest dann dieses Stück geschrieben Daten als leere Zeichenfolge und versucht, zu schreiben, dass das int-Feld in der Datenbank verursacht einen Fehler.
Ich glaube, ich brauche CodeIgniter zu behandeln, die string als NULL, wenn Sie leer ist, und eine Zahl, wenn es eine solche. Ich habe versucht mit php type juggling (int) zu konvertieren, aber es macht es eine 0. Dies ist ein Ungültiger Wert, denn es entspricht nicht der Auswahl in meinem man zu viele int-Feld in meiner DB.
Ist es eine Möglichkeit zu CodeIgniter behandle leere Zeichenketten als NULL anstelle des leeren strings?
[BEARBEITET, UM HINZUFÜGEN CODE]
{
//ExtJS combo object
xtype: 'combo',
id: 'Referrer',
store: new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: '/referrals/index.php/referrers/read',
method: 'POST'
}),
reader: new Ext.data.JsonReader({
root: 'results',
fields: [
{name: 'ID'},
{name: 'Referrer'}
]
})
}),
displayField: 'Referrer',
valueField: 'ID',
value: 1,
typeAhead: true,
hiddenName: 'Referrers_ID',
mode: 'remote',
triggerAction: 'all',
fieldLabel: 'Referrer',
selectOnFocus: true,
anchor: '100%'
}
//CI CODE TO GRAB FROM POST INTO AN ARRAY THEN OUT TO THE DB
public function create(){
$data = array(
'FirstName' => $this->input->post('FirstName', false),
'LastName' => $this->input->post('LastName', false),
'DOB' => $this->input->post('DOB', false),
'Email' => $this->input->post('Email', false),
'Phone' => $this->input->post('Phone', false),
'StudentNo' => $this->input->post('StudentNo', false),
'Sex' => $this->input->post('Sex', false),
'Advisors_ID' => $this->input->post('Advisors_ID', false),
'DateSeen' => $this->input->post('DateSeen', false),
'Classifications_ID' => join(",", $this->input->post('Classifications_ID', false)),
'Referrers_ID' => $this->input->post('Referrers_ID', false),
'Referrals' => $this->input->post('Referrals', false),
'ReferralNotes' => $this->input->post('ReferralNotes', false),
'Registration1' => $this->input->post('Registration1', false),
'Registration2' => $this->input->post('Registration2', false),
'Notes' => $this->input->post('Notes', false)
);
$this->db->insert('Clients', $data);
$insert_id = $this->db->insert_id();
}
- können die initial davon ausgehen, es ist ein problem mit Ihrer code, und nicht codeigniter-code... apropos, wir haben doch gesehen, dass alle Ihren code...
- Mein Erster Gedanke ist: "warum ein NULL-Wert ist OK, aber 0 nicht?" Durch Ihre eigene Zulassung, wird ein NULL-Wert wird genauso ein Waisenkind als 0
- Nein, ich bin nicht davon ausgehen, dass es ein problem mit Codeignighter, weiß ich nicht, würde ich es nennen, ein problem mit mir entweder. Wirklich, ich Frage mich, ob es einen Weg gibt, für den CI nehmen die leeren Saiten packt aus POST und übergeben Sie an die DB-wie die NULL-Werte anstelle von strings, da das ist, was Sie eingeben, CI, nichts, keine leere Zeichenkette.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, die variable namens " $myvar UND vorausgesetzt, Sie haben alles getan, die Fehler zu überprüfen, zu validieren und zu Gießen, bevor diese.
Diese geben die richtigen Daten codeignitor.
Gibt es zwei Möglichkeiten der Lösung der oben genannten Problem.
Erstens, Sie können ändern Sie einfach die Datenbank (vorausgesetzt du bist mit MySQL) Feld von "not NULL" auf "NULL" also leer-strings werden automatisch in einen NULL-von MySQL und würde erfordern keine änderung der von Ihrem code.
Zweitens, können Sie eine Abfrage ausführen, zu sagen, CodeIgniter zu null der string als solcher
Wenn Sie gehen zu müssen, um die 'null' - Funktion häufiger, erwägen, eine Bibliothek oder Helfer in CodeIgniter mit den oben stehenden code in form einer Funktion.
Dieser arbeitete für mich 🙂 ich zugewiesen doppelte Anführungszeichen string, wenn der input-Wert ist NULL oder leer