sql >> Databasteknik >  >> RDS >> Mysql

CodeIgniter infogar två gånger samma post. I vissa fall

Nåväl, jag fick reda på att _execute()-funktionen i CI_DB_pdo_driver inuti codeigniter-systemet inte fungerade korrekt, kanske är det på grund av php-versionen. Hur som helst ändrade jag koden för CodeIgniter från:

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

TILL:

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

Delen som testar om $sql innehåller ett "SELECT" inuti fungerade inte, så när jag försökte INFOGA så anropades "$result_id->execute()" två gånger.




  1. Fixa "ERROR 1222 (21000):De använda SELECT-satserna har ett annat antal kolumner" när du använder UNION i MariaDB

  2. Hur man använder flera databaser dynamiskt för en modell i CakePHP

  3. Migrerar MySQL 8.0.20-databas till AWS Aurora

  4. newid() inuti sql-serverfunktionen