2015-09-28 62 views

回答

0

好的。這是我如何破解代碼:

ref.version:

  • 雜貨店CRUD-1.5.2
  • 笨-3.0.1

STEP 1

文件:system\database\drivers\pdo\subdrivers\pdo_sqlsrv_driver.php

更新方法field_data($表)

public function field_data($table) 
{ 

    $sql = 'SELECT c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH, c.NUMERIC_PRECISION, c.COLUMN_DEFAULT 
      ,CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 1 ELSE 0 END AS KeyType 
       FROM INFORMATION_SCHEMA.COLUMNS c 
       LEFT JOIN (
        SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME 
        FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku 
         ON tc.CONSTRAINT_TYPE = \'PRIMARY KEY\' 
         AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME 
       ) pk 
       ON c.TABLE_CATALOG = pk.TABLE_CATALOG 
        AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA 
        AND c.TABLE_NAME = pk.TABLE_NAME 
        AND c.COLUMN_NAME = pk.COLUMN_NAME 
        WHERE UPPER(c.TABLE_NAME) = '.$this->escape(strtoupper($table)); 

    if (($query = $this->query($sql)) === FALSE) 
    { 
     return FALSE; 
    } 
    $query = $query->result_object(); 

    $retval = array(); 
    for ($i = 0, $c = count($query); $i < $c; $i++) 
    { 
     $retval[$i]   = new stdClass(); 
     $retval[$i]->name  = $query[$i]->COLUMN_NAME; 
     $retval[$i]->type  = $query[$i]->DATA_TYPE; 
     $retval[$i]->max_length  = ($query[$i]->CHARACTER_MAXIMUM_LENGTH > 0) ? $query[$i]->CHARACTER_MAXIMUM_LENGTH : $query[$i]->NUMERIC_PRECISION; 
     $retval[$i]->primary_key = $query[$i]->KeyType; 
     $retval[$i]->default  = $query[$i]->COLUMN_DEFAULT; 
    } 

    return $retval; 
} 

STEP 2

文件:\system\database\drivers\sqlsrv\sqlsrv_driver.php

更新方法field_data($表)

public function field_data($table) 
{ 

    $sql = 'SELECT c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH, c.NUMERIC_PRECISION, c.COLUMN_DEFAULT 
      ,CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 1 ELSE 0 END AS KeyType 
       FROM INFORMATION_SCHEMA.COLUMNS c 
       LEFT JOIN (
        SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME 
        FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku 
         ON tc.CONSTRAINT_TYPE = \'PRIMARY KEY\' 
         AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME 
       ) pk 
       ON c.TABLE_CATALOG = pk.TABLE_CATALOG 
        AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA 
        AND c.TABLE_NAME = pk.TABLE_NAME 
        AND c.COLUMN_NAME = pk.COLUMN_NAME 
        WHERE UPPER(c.TABLE_NAME) = '.$this->escape(strtoupper($table)); 

    if (($query = $this->query($sql)) === FALSE) 
    { 
     return FALSE; 
    } 
    $query = $query->result_object(); 

    $retval = array(); 
    for ($i = 0, $c = count($query); $i < $c; $i++) 
    { 
     $retval[$i]   = new stdClass(); 
     $retval[$i]->name  = $query[$i]->COLUMN_NAME; 
     $retval[$i]->type  = $query[$i]->DATA_TYPE; 
     $retval[$i]->max_length  = ($query[$i]->CHARACTER_MAXIMUM_LENGTH > 0) ? $query[$i]->CHARACTER_MAXIMUM_LENGTH : $query[$i]->NUMERIC_PRECISION; 
     $retval[$i]->primary_key = $query[$i]->KeyType; 
     $retval[$i]->default  = $query[$i]->COLUMN_DEFAULT; 
    } 

    return $retval; 
} 

STEP 3

文件:\system\database\drivers\mssql\mssql_result.php

更新方法field_data()

public function field_data() 
{ 
    $retval = array(); 
    for ($i = 0, $c = $this->num_fields(); $i < $c; $i++) 
    { 
     $field = mssql_fetch_field($this->result_id, $i); 

     $retval[$i]  = new stdClass(); 
     $retval[$i]->name = $field->name; 
     $retval[$i]->type = $field->type; 
     $retval[$i]->max_length = $field->max_length; 
     $retval[$i]->primary_key = $field->primary_key; 

    } 

    return $retval; 
} 

這就是全部。我希望它能幫助別人。