sql >> データベース >  >> RDS >> Mysql

CodeIgniterは同じエントリを2回挿入しています。ある場合には

    さて、codeigniterシステム内のCI_DB_pdo_driverの_execute()関数が正しく機能していないことがわかりました。おそらく、phpバージョンが原因です。とにかく、CodeIgniterのコードを次のように変更しました:

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

    $ sqlに「SELECT」が含まれているかどうかをテストする部分が機能していなかったため、INSERTを実行しようとすると、「$ result_id-> execute()」が2回呼び出されていました。




    1. JavaまたはMySQLでのパスワードの暗号化?

    2. MySQL-Pythonを使用して異なるサーバー上のデータベース間で結合しますか?

    3. 電話のSQLvarchar(length)で考慮すべき世界で最も長い電話番号は何ですか

    4. C#からデータベースを復元する方法