Parcourir la source

Fixed:遗漏INSERT为写操作

Jinhui Zhu il y a 5 ans
Parent
commit
4f75f97b10
2 fichiers modifiés avec 14 ajouts et 8 suppressions
  1. 14 5
      src/Driver/ConnBase.php
  2. 0 3
      src/Driver/Pdo/Driver.php

+ 14 - 5
src/Driver/ConnBase.php

@@ -31,9 +31,9 @@ class ConnBase
 	protected function prepare($sql)
 	{
 		$default = "READ";
-		$readMode = "/^SELECT\s/u";
-		$writeMode = "/^(UPDATE)|(REPLACE)|(DELETE)\s/u";
-		$isRead = preg_match($readMode, $sql);
+		//$readMode = "/^SELECT\s/u";
+		$writeMode = "/^(UPDATE)|(REPLACE)|(DELETE)|(INSERT)\s/u";
+		//$isRead = preg_match($readMode, $sql);
 		$isWrite = preg_match($writeMode, $sql);
 		if ($isWrite) $default = "WRITE";
 		if (!isset($this->allowExec[$default])) $default = 'WRITE';
@@ -49,15 +49,24 @@ class ConnBase
 	public function getConnectionBySQL($sql)
 	{
 		$default = $this->prepare($sql);
+		echo "1.". $sql ."\n";
 		if (isset($this->_connections[$default])) return $this->_connections[$default];
 		switch ($default) {
 			case 'READ':
-				return $this->_connections[$default] = $this->getReadConnection();
+				$connection = $this->_connections['READ'] = $this->getReadConnection();
 				break;
 			default:
-				return $this->_connections['WRITE'] = $this->getWriteConnection();
+                $connection = $this->_connections['WRITE'] = $this->getWriteConnection();
 				break;
 		}
+
+        if(get_called_class() == 'Qii\Driver\Pdo\Connection'){
+            echo "2.". $sql ."\n";
+            $connection->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
+            $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_WARNING);
+            $connection->query('set names utf8');
+        }
+        return $connection;
 		throw new \Exception('Call undefined driver', __LINE__);
 	}
 }

+ 0 - 3
src/Driver/Pdo/Driver.php

@@ -113,9 +113,6 @@ class Driver extends \Qii\Driver\Base implements \Qii\Driver\Intf
         }
         $this->sql = $sql;
         $this->db['CURRENT'] = $this->connection->getConnectionBySQL($sql);
-        $this->db['CURRENT']->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
-        $this->db['CURRENT']->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_WARNING);
-        $this->db['CURRENT']->query('set names utf8');
         $rs = $this->db['CURRENT']->query($sql);
         $this->setError();
         if (!$rs) {