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

これを試してください:クエリに、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()."')");
于 2012-11-26T11:52:13.397 に答える
0

使用する

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

実行されたクエリを取得するため。

そのため、クエリが適切にフォーマットされているかどうかを確認してください。

于 2012-11-26T11:04:08.300 に答える
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 に答える