0

我遇到了 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 调试选项有点困惑。

4

4 回答 4

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()."')
");

注意每个字符串周围的新 ' 字符。

于 2012-11-26T11:36:36.723 回答
0

试试这个:您的查询缺少字符串类型值的单引号,例如电子邮件、语言和 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()."')");
于 2012-11-26T11:52:13.397 回答
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();
  } 
于 2012-11-26T11:08:11.627 回答
0

利用

echo $this->db->last_query();

用于检索已运行的查询。

所以然后检查查询是否格式正确。

于 2012-11-26T11:04:08.300 回答