sql >> Databáze >  >> RDS >> Mysql

CodeIgniter vkládá dvakrát stejnou položku. V některých případech

No, zjistil jsem, že funkce _execute() v CI_DB_pdo_driver uvnitř systému codeigniter nepracuje správně, možná je to kvůli verzi php. Každopádně jsem změnil kód CodeIgniter z:

    function _execute($sql)
{
    $sql = $this->_prep_query($sql);
    $result_id = $this->conn_id->prepare($sql);
    $result_id->execute();

    if (is_object($result_id))
    {
        if (is_numeric(stripos($sql, 'SELECT')))
        {
            $this->affect_rows = count($result_id->fetchAll());
            $result_id->execute();
        }
        else
        {
            $this->affect_rows = $result_id->rowCount();
        }
    }
    else
    {
        $this->affect_rows = 0;
    }

    return $result_id;
}

TO:

    function _execute($sql)
{
    $sql = $this->_prep_query($sql);
    $result_id = $this->conn_id->prepare($sql);
    $result_id->execute();

    if (is_object($result_id))
    {
        if (preg_match('/^\s*"?(SELECT)\s+/i', $sql))
        {
            $this->affect_rows = count($result_id->fetchAll());
            $result_id->execute();
        }
        else
        {
            $this->affect_rows = $result_id->rowCount();
        }
    }
    else
    {
        $this->affect_rows = 0;
    }

    return $result_id;
}

Část, která testuje, zda $sql obsahuje uvnitř "SELECT", nefungovala, takže když jsem se pokusil INSERT vložit "$result_id->execute()", bylo voláno dvakrát.




  1. Jak doleva připojit několik tabulek od jedné k mnoha v mysql?

  2. Relační databáze

  3. PostgreSQL array_agg pořadí

  4. Jedna nebo více databází na kontejner Docker