sql >> Database teknologi >  >> RDS >> Mysql

CodeIgniter indsætter to gange den samme post. I nogle tilfælde

Nå, jeg fandt ud af, at funktionen _execute() i CI_DB_pdo_driver inde i codeigniter-systemet ikke fungerede korrekt, måske er det på grund af php-versionen. Alligevel ændrede jeg koden for CodeIgniter fra:

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

TIL:

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

Den del, der tester, om $sql indeholder et "SELECT" inde, virkede ikke, så da jeg prøvede at INDSÆTTE, blev "$result_id->execute()" kaldt to gange.




  1. MySQL:Giv **alle** privilegier på databasen

  2. Hvordan gentages flere forespørgselsresultater for at reducere forespørgselsnummeret?

  3. Oracle-udløser efter indsættelse eller sletning

  4. Udfordringer ved at skalere Moodle PostgreSQL-databasen