金沙澳门官网7817网址ThinkPHP2.0读取MSSQL提醒Incorrect syntax near the keyword ‘AS’的解决方式

原因是DbMssql.class.php驱动的查询语句有问题,可以正确读取到数据,/ThinkPHP/ThinkPHP.php //框架入口文件,ThinkPHP是国内非常火的一个轻量级框架,把 php 默认最大只能读 4K 改大一点,都是说 php 读 ntext

这么不只能使用 Thinkphp 的模块进行简短的数目查询也能应用 Adodb
实行分页数据的查询,实乃不能中的办法了,这些是个笨办法哦,仍旧希望
ThinkPHP 能够出一个 MSSQL 二零零四 版本能用的应有尽有驱动。

$runtime = defined(‘MODE_NAME’)?’~’.strtolower(MODE_NAME).’_runtime.php’:’~runtime.php’;//若是设置了其余运转形式则~ruturn.php就变化为 ~格局ruturn.php,(举例,采纳命令行形式运转),那么在进口文件中定义MODE_NAME如下define(‘MODE_NAME’,’cli’卡塔尔国;  那么这里的缓存文件就为~cliruturn.php

生机勃勃经 title 字段类型为 nvarchar,content 字段类型为 ntext
,那么下边包车型客车sql语句会报错:

目的在于官方能够给TP2.0加一个二〇〇一的驱动吧,近期使用的有的时候管理措施是修改ThinkPHP\Lib\Think\Db\Driver\DbMssql.class.php
,将行 25 的 protected $selectSql 在眼下加 ‘//’ 
并且第326行 的

 

1.修改 php.ini

并发之处是选取 query
能够正确读取到多少,而使用M方法,则无从读取,会报出 Incorrect syntax
near the keyword ‘AS’. 错误
案由是DbMssql.class.php驱动的查询语句有标题。

 

$conn-》Connect(“Driver={SQL
Server};Server=localhost;Database=mydb;”,‘username’,‘password’);

这么改善后,基本得以满意平时的SQL供给,但不可能采用LIMIT,因为 MSSQL 二零零三的LIMIT方法是以 top N
那样达成的;

    );

错的:

query('select top 10 * from f_city'); 
    dump($test); 
    */ 
    $CityModel = M('city'); 
    $CityModel->find(); 
    dump($CityModel); 
  } 
} 
?>

        ThinkPHP/Lib/Core/View.class.php,  // 视图类

mssql.textsize = 2147483647

public function parseLimit($limit) { 
      if(emptyempty($limit)) $limit=1; 
  $limit    =    explode(',',$limit); 
  if(count($limit)>1) 
    $limitStr    =    '(T1.ROW_NUMBER BETWEEN '.$limit[0].' + 1 AND '.$limit[0].' + '.$limit[1].')'; 
      else 
    $limitStr = '(T1.ROW_NUMBER BETWEEN 1 AND '.$limit[0].")"; 
  return $limitStr; 
} 

ThinkPHP/Tpl/page_trace.tpl //页面Trace新闻的模板

;mssql.textlimit = 4096

在项目标任何文件中都要援引到这些 CommonAction.class.php 文手艺采用ADODB,举个例子:
 

 

正确的:

dbsql->Execute('select * from xxx'); 
    while($rows = $query->FetchRow()) { 
        echo $rows['fields']; 
     } 
  } 
} 
?>

    // 加载运维时文件,载入系统运作时文件runtime.php并定义项目路径常量

include(“adodb/adodb.inc.php”); //蕴涵adodb类库文件

借使以为麻烦,那么就组成 Adodb 类库吧,这么些对MSSQL协助相对好广大。要结合
Adodb 类库我的措施如下:

        G(‘initTime’);

 代码如下

public function parseLimit($limit) { 
  return ''; 
}

 

select convert(varchar(255),title) as title,
convert(text,content) as content from article

改为:

 

mssql.textlimit = 2147483647

出于TP2.0 的 MSSQL 驱动是对SQL
二零零七使得,但对贰零零零版本则不行,原因是二〇〇三版本里未有 ROW_NUMBELX570效率,2006才有这一个功效作用好疑似对数据分页提供低价和效力。

define(‘MEMORY_LIMIT_ON’,function_exists(‘memory_get_usage’));//php中用echo memory_get_usage(卡塔尔国 获取当前的内部存款和储蓄器消耗量 

{使用adodb有几许要专一,使用adodbPHP连MSSQL的前提是驱动难题,5.2.10从前,PHP自带的驱动只扶植MSSQL
7.0,假如要援救MSSQL 二零零三,必要将MSSQL
二〇〇二的ntwdblib.dll(二〇〇一.80.2039.0)复制到System32依旧PHP目录下
5.2.11才支撑MSSQL 2001,假使急需援救MSSQL
二〇〇七和贰零零捌,须要安装微软提供的驱动

Connect(C('DB_HOST'), C('DB_USER'), C('DB_PWD'), C('DB_NAME')); 
    $adodb->SetFetchMode(ADODB_FETCH_ASSOC); 
    $this->dbsql = $adodb; 
  } 
} 
?>

//117-224 // 成立项目目录布局

3.假如你是虚构主机,基本上能用adodb
组件来读取。假若你主机不扶持,最近我也不能够了。

首先下载 Adodb 类库并解压到 ThinkPHP 的 Vendor 目录中,并把
adodb.inc.php 改名字为 adodb.php
然后在类型的 Lib 里创建多个 CommonAction.class.php 内容为

 

;mssql.textsize = 4096

主题材料代码如下:

// 在load_runtime_file(卡塔尔中被援引

if(!$link    !mssql_select_db(‘php’, $link))

//创设项目目录布局

$row = mssql_fetch_array($version);

require (‘../ThinkPHP/ThinkPHP.php’State of Qatar;//引进框架文件

3.倘使您是虚构主机,能够选用adodb
组件来读取。假如你主机不援助,前段时间笔者也不可能了。

 

?>

function check_runtime() {

 代码如下

ThinkPHP/Common/functions.php //标准方式公共函数库

$version = mssql_query(‘SELECT @@VERSION’);

    // pathinfo常量 __INFO__

$conn=NewADOConnection(‘odbc_mssql’); //连接SQL Server数据库

    require RUNTIME_FILE;

include(“adodb/adodb.inc.php”State of Qatar; //包括adodb类库文件
$conn=NewADOConnection(‘odbc_mssql’); //连接SQL Server数据库
$conn->Connect(“Driver={SQL
Server};Server=localhost;Database=mydb;”,’username’,’password’);
?>

defined(‘APP_DEBUG’) or define(‘APP_DEBUG’,false卡塔尔(قطر‎; // 是或不是调节和测验格局,暗中同意false

2.能够运用改正字段,由于sql
server中,ntext和nvarchar字段是用unicode编码存款和储蓄内容的,由此php通过mssql扩大读取带ntext和nvarchar类型字段的时候会抱错。

 

    ; Valid range 0 – 2147483647.  Default = 4096.
    ;mssql.textlimit = 4096

    * 2、ThinkPHP/Lib/Core/Log.class.php,    // 日志管理类

{

//引入/ThinkPHP/Lib/Core/Think.class.php

echo $row[0];

function load_runtime_file() {

}

function build_app_dir(){

    ; Valid range 0 – 2147483647.  Default = 4096.
    ;mssql.textsize = 20480

ThinkPHP是境内拾壹分火的一个轻量级框架,采纳MVC格局,构造写的要命好,明天 大象 带我们走一下ThinkPHP框架种类运维流程,作者将随行ThinkPHP的实施举办代码批注,第风度翩翩课,先讲授UEscortL路由解析

旗帜明显能够链接到数据库,却不可能读取的数量。Google,百度意气风发番过后终于理解了,原本是php读取mssql的
ntext字段反回值为空的,建议方可把ntext字段改成 text。

    // ThinkPHP/Common/common.php //加载项目集体文件(函数库)

1.修改 php.ini

}

select convert(varchar(255),title) as title, convert(text,content) as
content from article

金沙澳门官网7817网址,//#37-49 应用程序开始化

正确的:

 

1、把 php 升级到 php5 。

 

mssql.textsize = 2147483647

        // 项目始于标签

// MSSQL and print it.

}

// Do a simple query, select the version of

 * ThinkPHP 运转时文件 编译后不再加

$link = mssql_connect(‘KALLESPCSQLEXPRESS’, ‘sa’, ‘phpfi’);

 

错的:

ThinkPHP/Common/common.php //框架根基函数库

找到:

 * 1、客户访谈网址U翼虎L地址 

// Clean up
mssql_free_result($version);
?>
 

    // 定义模板路线常量 define(‘应用程式_TMPL_PATH’,__ROOT__.’/’.APP_NAME.(APP_NAME?’/’:”).basename(TMPL_PATH).’/’.$group.(THEME_NAME?THEME_NAME.’/’:”));

mssql_free_result($version);

* 接上一步,跳入App::init(卡塔尔(قطر‎;后,大家开掘须要跳入Dispatcher::dispatch(卡塔尔国;UEvoqueL调整类中实行UEscortL参数常量赋值,上面带你进来Disppatcher::dispatch方法中张开常量赋值

    好在,笔者的早正是 php5 了。

 * ThinkPHP/ThinkPHP.php框架入口文件

 代码如下

 

echo $row[0];

        spl_autoload_register(array(‘Think’, ‘autoload’));//将$this->autoload()注册为__autoload()方法

 代码如下

    require THINK_PATH.’Common/runtime.php’;

2、调治 php.ini 的参数,把 php 暗中认可最大不能不读 4K 改大学一年级点。

* 完毕后跳回到App::init(卡塔尔(قطر‎; 

 

 

于是只要是设想主机基本不能够

/*

 代码如下

 

改为

    // 若是有分组,include 分组配置与函数文件

在网络找了相当久,都以说 php 读 ntext
出错的,但没觉察自家的页面出错,就烦闷了。后来才查到是说 php
暗许最大一定要读 4K 的内容,原来是自己的剧情超过了 4K。修改章程如

        App::init();

 代码如下

    // U凯雷德L调治 Dispatcher::dispatch(State of Qatar; //步向Thinkphp/lib/Core/Dispatcher.class.php dispatch(State of Qatar方法,举行UWranglerL参数常量赋值

假诺是表里面未有ntext字段,能够用来下代码:

    // 欧克至此该引进的文书全体引进完结,下边疏解调节器篇

;mssql.textlimit = 4096 

* 最终一步跳入App::exec(State of Qatar;

读取mssql的ntext字段反回空置

//#36-153 URL映射到调控器

如若表里面有ntext军字段,且倒霉改进回text字段, 能够如下:

 

select title,content from article

set_include_path(get_include_path() . PATH_SEPARATOR . VENDOR_PATH卡塔尔国;//这一句将/ThinkPHP/Extend/Vendor/ 出席了include_path目录中

改为

 * 决断系统常量,若无定义则自动生成

// Connect to MSSQL

 

若果 title 字段类型为 nvarchar,content 字段类型为 ntext
,那么下边包车型客车sql语句会报错:

/*

{这几个法子不太实用,要是ntext内容 太长
转换之后会废弃数据,也就说过长的篇章被截断了,并且在sql2009中
把ntext改成 nvarchar(maxState of Qatar 也丰裕}

function build_tags_cache() {

打开php.ini

    // 安全检查测量试验,模块名必得是罗马尼亚语和数字组成,且意大利语为首

;mssql.textsize = 4096 

 

if(!$link    !mssql_select_db(‘php’, $link))
{
die(‘Unable to connect or select database!’);
}

 * 2、载入系统入口文件ThinkPHP.php 

找到:

    // 当前操作地址常量 define(‘__ACTION__’,__URL__.$depr.ACTION_NAME);

改为

    // load_ext_file(卡塔尔; 加载动态项目集体文件和布置

2.方可使用改进字段,由于sql
server中,ntext和nvarchar字段是用unicode编码存储内容的,因而php通过mssql扩大读取带ntext和nvarchar类型字段的时候会抱错。

//引入/ThinkPHP/Lib/Core/Behavior.class.php,

die(‘Unable to connect or select database!’);

* /ThinkPHP/lib/Core/App.class.php //应用程序类 推行应用进度管理

找到:

    * 3、ThinkPHP/Lib/Core/Dispatcher.class.php, // URL调度类

?》

        //试行应用程序

 

    // 定义模板文件的职位 C(‘TEMPLATE_NAME’,THEME_PATH.MODULE_NAME.(defined(‘GROUP_NAME’)?C(‘TMPL_FILE_DEPR’):’/’).ACTION_NAME.C(‘TMPL_TEMPLATE_SUFFIX’));

// Do a simple query, select the version of
// MSSQL and print it.
$version = mssql_query(‘SELECT @@VERSION’);
$row = mssql_fetch_array($version);

 

Convert(text, content卡塔尔(قطر‎ 转了,无效果不说,还差点把本身的 iis
弄死。在英特网找了十分久都无解。就在作者希图抛弃时,三个品尝的概念让自家把数据库连接格局改了须臾间。小编把

// #89-138 实施应用程序

    把 mssql.textlimit  和 mssql.textsize
后边的“;“去了,再把默许值勤改大学一年级点,举例 20480 (20KState of Qatar

    // URL常量 define(‘__SELF__’,strip_tags($_SERVER[‘REQUEST_URI’]));

 

 

// Connect to MSSQL
$link = mssql_connect(‘KALLESPCSQLEXPRESS’, ‘sa’, ‘phpfi’);

static private function buildApp() {

odbc_connect 改为 mssql_connect 居然就打响了。

 

php 链接mssql难点 ntext无法读取

function build_first_action(){

打开php.ini

    * 6、ThinkPHP/Lib/Core/View.class.php,  // 视图类

下:

    * 9、ThinkPHP/Conf/debug.php的暗许调节和测量试验配置

本以为扣人心弦的任何时候会过来,运营 php
页面,效果依旧跟在此以前同样,字段数据还未完全读出来。后来又找到资料说 php
对 ntext 的帮忙不是很融洽,要转为 text。于是又用

 

找到:

 

固然表里面有ntext军字段,且不佳改革回text字段, 能够如下:

}

3、重启 web 服务器。

ThinkPHP/Tpl/default_index.tpl //测验模块的模版

select title,content from article

    static public function run() {

}

    // 项目/Conf/alias.php 加载项目别称定义(项目自定义类库,用小名导入的主意引进的自定义类库)

倘要是表里面未有ntext字段,能够用来下代码:

ThinkPHP/Tpl/think_exception.tpl //系统错误消息的模板

在测验的时候确定能够链接到数据库,然则怎么也读取不到数量。经过查找资料开掘原来是php读取mssql的
ntext字段反回值为空的,建议方可把ntext字段改成 text。

//227-230 // 创设测验Action

改为