sql >> Database >  >> RDS >> Mysql

CodeIgniter voegt tweemaal dezelfde invoer in. In sommige gevallen

Nou, ik kwam erachter dat de functie _execute() in CI_DB_pdo_driver in het codeigniter-systeem niet goed werkte, misschien komt het door de php-versie. Hoe dan ook, ik heb de code van de CodeIgniter gewijzigd van:

    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;
}

AAN:

    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;
}

Het deel dat test of de $sql een "SELECT" bevat, werkte niet, dus toen ik probeerde te INSERT werd de "$result_id->execute()" twee keer aangeroepen.




  1. 3 manieren om de eerste dag van de maand in SQL Server te krijgen

  2. Letterlijke tekenreeksen en escape-tekens in postgresql

  3. Hoe u een tabel in PostgreSQL kunt draaien

  4. Postgres:INSERT als het nog niet bestaat