12

CodeIgniterを使用してMySQLテーブルにデータを挿入しています。この機能を有効にするためにアクティブレコードクラスを使用INSERT IGNORE INTOしていて編集したくないので、SQLクエリを手動で生成しています。

$this->db->query("INSERT IGNORE INTO my_table(lat, lng, date, type)
                        VALUES ('" . $data['lat'] . "', '" . $data['lng'] . "', '" . $data['date'] . "', '" . $data['type'] . "')");

問題:$data['type']の文字列に一重引用符が含まれていると、クエリが失敗しました。アクティブレコードを使用する場合のように、エスケープする必要のあるこれらの文字が自動的にエスケープされるようにするにはどうすればよいですか?

4

2 に答える 2

26

もう 1 つの方法は、すべての値を自動的にエスケープするクエリ バインディングを使用することです。

$sql = "INSERT IGNORE INTO my_table(lat, lng, date, type) VALUES (?,?,?,?);"; 
$this->db->query($sql, array($data['lat'], $data['lng'], $data['date'], $data['type']));
于 2012-06-10T12:14:00.417 に答える
9

$this->db->e​​scape();を使用します。文字列を自動的にエスケープします

この関数は、文字列データのみをエスケープできるようにデータ型を決定します。また、データの前後に一重引用符が自動的に追加されるため、次のことを行う必要はありません。

$this->db->query("INSERT IGNORE INTO my_table(lat, lng, date, type)
VALUES ('" . $this->db->escape($data['lat']) . "', '" . $this->db->escape($data['lng']) . "', '" . $this->db->escape($data['date']$this->db->escape . "', '" . $this->db->escape($data['type']) . "')");

参考文献はこちら ここをクリック

于 2012-06-10T12:08:02.553 に答える