Wstawiam niektóre dane do tabeli MySQL za pomocą CodeIgniter. Ponieważ używam INSERT IGNORE INTO
i nie chcę edytować aktywnej klasy rekordów, aby włączyć tę funkcję, generuję zapytanie SQL ręcznie.Uciekające zapytania SQL w Codeigniter
$this->db->query("INSERT IGNORE INTO my_table(lat, lng, date, type)
VALUES ('" . $data['lat'] . "', '" . $data['lng'] . "', '" . $data['date'] . "', '" . $data['type'] . "')");
Problem: Zapytanie nie powiodło się, gdy łańcuch w $data['type']
zawierał jeden cytat. W jaki sposób mogę sprawić, że te znaki, które muszą być zmienione, zostaną automatycznie usunięte, na przykład podczas korzystania z Aktywnych rekordów?
Możesz uczynić to jeszcze prostszym: '$ this-> db-> query ($ sql, $ data);' To działa dla mnie! (Domyślam się, że nie powinieneś mieć żadnych innych kluczy w tablicy danych, aby działał) – Saneem
Lub przepisać go na wzór rekordu aktywnego: '$ this-> db-> inset ('some_table', $ data);' znacznie więcej prosto i bardzo łatwo. Upewnij się tylko, że żadne automatyczne pole klucza podstawowego nie czyni go metodą 'insert()', używając 'if (! Isset ($ data ['id'])) wyrzuć nowy {InvalidArgumentException ('dane [id] są niedozwolone dla insertu "); } ' – Roland