Mysql
 sql >> Baza danych >  >> RDS >> Mysql

CodeIgniter wstawia dwa razy ten sam wpis. W niektórych przypadkach

Otóż ​​dowiedziałem się, że funkcja _execute() w CI_DB_pdo_driver wewnątrz systemu codeigniter nie działa poprawnie, być może jest to spowodowane wersją php. W każdym razie zmieniłem kod CodeIgnitera 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;
}

DO:

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

Część, która sprawdza, czy $sql zawiera "SELECT" w środku, nie działała, więc kiedy próbowałem INSERT, "$result_id->execute()" był wywoływany dwa razy.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić wiele wartości pól wyboru do bazy danych

  2. Java sprawdzająca, czy wartość istnieje w bazie danych

  3. Czy ip2long() w PHP równa się funkcji INET_ATON() w MySQL?

  4. Sprawdź, czy dwie nazwy są blisko siebie

  5. Jaka jest właściwa konwencja nazewnictwa dla pakietów MySQL FK?