我遇到CodeIgniter数据库查询的语法问题。无法弄清楚出了什么问题。
$query = $this->db->query("
INSERT IGNORE INTO ".$table." (email, lang, ip_address)
VALUES (".$this->db->escape($_POST['email']).", ".$this->db->escape($lang).", ".$this->input->ip_address().")");
我也在寻找一种方法来输出替换占位符后查询的样子,因为我对CodeIgniter调试选项感到困惑。
答案 0 :(得分:2)
看起来好像您没有转义您尝试输入数据库的字符串。您发布的查询将评估为:
$query = $this->db->query("
INSERT IGNORE INTO table_name (email, lang, ip_address)
VALUES (email@email.com, en, 192.168.0.1)
");
由于VALUES中的字符串未正确转义,因此会抛出错误。而不是你正在运行的查询,你应该使用类似的东西:
$query = $this->db->query("
INSERT IGNORE INTO ".$table." (email, lang, ip_address)
VALUES ('".$this->db->escape($_POST['email'])."', '".$this->db->escape($lang)."', '".$this->input->ip_address()."')
");
注意每个字符串周围的新'字符。
答案 1 :(得分:0)
使用
echo $this->db->last_query();
用于检索已运行的查询。
然后检查查询是否格式正确。
答案 2 :(得分:0)
知道要传递给数据库的查询。使用以下语句并将数据插入数据库。请按照以下程序操作。
echo $this->db->last_query();
$data = array(
'email' => $this->db->escape($_POST['email']),
'lang' = > $this->db->escape($lang),
'ip_address' => $this->input->ip_address(),
);
Call your model function $this->model->insert_function_name($data);
Your model function in your model file
public function insert_function_name($data)
{
$this->db->insert($table_name,$data);
return $this->db->insert_id();
}
答案 3 :(得分:0)
试试这个:您的查询缺少单引号到字符串类型的值,如email,lang和ip
$query = $this->db->query("
INSERT IGNORE INTO ".$table." (email, lang, ip_address)
VALUES ('".$this->db->escape($_POST['email'])."', '".$this->db->escape($lang)."', '".$this->input->ip_address()."')");