Heim Backend-Entwicklung PHP-Tutorial ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword '_PHP

ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword '_PHP

Jun 01, 2016 am 11:51 AM
解决方法

ThinkPHP

问题代码如下:

<&#63;php 
class IndexAction extends Action{ 
  public function index(){ 
    /* 
    $Model = new Model(); 
    $test = $Model->query('select top 10 * from f_city'); 
    dump($test); 
    */ 
    $CityModel = M('city'); 
    $CityModel->find(); 
    dump($CityModel); 
  } 
} 
&#63;>

Nach dem Login kopieren

出现的情况是使用 query 可以正确读取到数据,而使用M方法,则无法读取,会报出 Incorrect syntax near the keyword 'AS'. 错误
原因是DbMssql.class.php驱动的查询语句有问题。

由于TP2.0 的 MSSQL 驱动是对SQL 2005有效,但对2000版本则无效,原因是2000版本里没有 ROW_NUMBER 功能,2005才有这个功能作用好像是对数据分页提供便利和效能。

希望官方能够给TP2.0加一个2000的驱动吧,目前采用的临时处理方法是修改ThinkPHP\Lib\Think\Db\Driver\DbMssql.class.php ,将行 25 的 protected $selectSql 在前面加 '//'
并且第326行 的

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

Nach dem Login kopieren

改为:

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

Nach dem Login kopieren

这样更改后,基本可以满足一般的SQL需求,但不能使用LIMIT,因为 MSSQL 2000 的LIMIT方法是以 top N
这样实现的;

如果觉得麻烦,那么就结合 Adodb 类库吧,这个对MSSQL支持相对好很多。要结合 Adodb 类库我的方法如下:

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

<&#63;php 
class CommonAction extends Action { 
  public $dbsql; 
  function _initialize() { 
    Vendor('adodb5.adodb'); 
    $adodb = ADONewConnection(C('DB_TYPE')); 
    $adodb->Connect(C('DB_HOST'), C('DB_USER'), C('DB_PWD'), C('DB_NAME')); 
    $adodb->SetFetchMode(ADODB_FETCH_ASSOC); 
    $this->dbsql = $adodb; 
  } 
} 
&#63;>

Nach dem Login kopieren

在项目的其他文件中都要引用到这个 CommonAction.class.php 文才能使用 ADODB,例如:

<&#63;php 
class IndexAction extends CommonAction { 
  public function index() { 
    $query = $this->dbsql->Execute('select * from xxx'); 
    while($rows = $query->FetchRow()) { 
        echo $rows['fields']; 
     } 
  } 
} 
&#63;>
Nach dem Login kopieren

这样既能使用 Thinkphp 的模块进行简单的数据查询也能使用 Adodb 进行分页数据的查询,实在是没办法中的办法了,这个是个笨办法哦,还是希望 ThinkPHP 能够出一个 MSSQL 2000 版本能用的完美驱动。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Apr 19, 2025 pm 04:51 PM

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Navicat -Lösung für die Datenbank kann nicht angeschlossen werden Navicat -Lösung für die Datenbank kann nicht angeschlossen werden Apr 08, 2025 pm 11:12 PM

Die folgenden Schritte können verwendet werden, um das Problem zu beheben, das Navicat keine Verbindung zur Datenbank herstellen kann: Überprüfen Sie die Serververbindung, stellen Sie sicher, dass der Server ausgeführt wird, adressiert und port korrekt und die Firewall erlaubt Verbindungen. Überprüfen Sie die Anmeldeinformationen und bestätigen Sie, dass der Benutzername, das Kennwort und die Berechtigungen korrekt sind. Überprüfen Sie Netzwerkverbindungen und Fehlerbehebung mit Netzwerkproblemen wie Router oder Firewall -Fehlern. Deaktivieren Sie SSL -Verbindungen, die von einigen Servern möglicherweise nicht unterstützt werden. Überprüfen Sie die Datenbankversion, um sicherzustellen, dass die Navicat -Version mit der Zieldatenbank kompatibel ist. Passen Sie das Verbindungs ​​-Zeitüberschreitende an und erhöhen Sie für Remote- oder langsamere Verbindungen das Zeitüberschreitungszeitübergang. Andere Problemumgehungen, wenn die oben genannten Schritte nicht funktionieren, können Sie versuchen, die Software neu zu starten, einen anderen Verbindungsfahrer zu verwenden oder den Datenbankadministrator oder den offiziellen Navicat -Support zu konsultieren.

Was tun, wenn Redis -Speicherverbrauch zu hoch ist? Was tun, wenn Redis -Speicherverbrauch zu hoch ist? Apr 10, 2025 pm 02:21 PM

Der Redis -Speicher steigt: zu großes Datenvolumen, unsachgemäße Datenstrukturauswahl, Konfigurationsprobleme (z. B. MaxMemory -Einstellungen zu klein) und Speicherlecks. Zu den Lösungen gehören: Löschen abgelaufener Daten, Verwendung der Komprimierungstechnologie, Auswahl geeigneter Strukturen, Anpassung der Konfigurationsparameter, der Überprüfung von Speicherlecks im Code und regelmäßiger Überwachung der Speicherverwendung.

Was sind die häufigen Missverständnisse in der CentOS -HDFS -Konfiguration? Was sind die häufigen Missverständnisse in der CentOS -HDFS -Konfiguration? Apr 14, 2025 pm 07:12 PM

HSDFS -Konfiguration (Hadoop Distributed Datei Systems) im Unter -CentOS beim Aufbau eines Hadoophdfs -Clusters auf CentOS, einige häufige Missverständnisse können zu einer Verschlechterung der Leistung, dem Datenverlust und sogar der Cluster können nicht starten. Dieser Artikel fasst diese häufigen Probleme und ihre Lösungen zusammen, um diese Fallstricke zu vermeiden und die Stabilität und den effizienten Betrieb Ihres HDFS -Clusters zu gewährleisten. Fehlerbewusstseinsfehler: Problem: Problem: Rackbewusstliche Informationen werden nicht korrekt konfiguriert, was zu einer ungleichmäßigen Verteilung der Datenblock-Replikas und der Erhöhung der Netzwerkbelastung führt. Lösung: Überprüfen Sie die rackbewusste Konfiguration in der Datei HDFS-site.xml und verwenden Sie HDFSDFSAdmin-Printtopo

Kann gegen Code in Windows 8 ausgeführt werden Kann gegen Code in Windows 8 ausgeführt werden Apr 15, 2025 pm 07:24 PM

VS -Code kann unter Windows 8 ausgeführt werden, aber die Erfahrung ist möglicherweise nicht großartig. Stellen Sie zunächst sicher, dass das System auf den neuesten Patch aktualisiert wurde, und laden Sie dann das VS -Code -Installationspaket herunter, das der Systemarchitektur entspricht und sie wie aufgefordert installiert. Beachten Sie nach der Installation, dass einige Erweiterungen möglicherweise mit Windows 8 nicht kompatibel sind und nach alternativen Erweiterungen suchen oder neuere Windows -Systeme in einer virtuellen Maschine verwenden müssen. Installieren Sie die erforderlichen Erweiterungen, um zu überprüfen, ob sie ordnungsgemäß funktionieren. Obwohl VS -Code unter Windows 8 möglich ist, wird empfohlen, auf ein neueres Windows -System zu upgraden, um eine bessere Entwicklungserfahrung und Sicherheit zu erzielen.

CentOS Minio -Installationsberechtigungen Probleme CentOS Minio -Installationsberechtigungen Probleme Apr 14, 2025 pm 02:00 PM

Berechtigungen Probleme und Lösungen für die Miniominstallation im Rahmen des CentOS -Systems Bei der Bereitstellung von Minio in CentOS -Umgebung sind Erlaubnisprobleme häufige Probleme. In diesem Artikel werden mehrere allgemeine Berechtigungsprobleme und ihre Lösungen eingeführt, damit Sie die Installation und Konfiguration von Minio reibungslos abschließen können. Ändern Sie das Standardkonto und Kennwort: Sie können den Standard -Benutzernamen und das Standardkennwort ändern, indem Sie die Umgebungsvariablen minio_root_user und minio_root_password einstellen. Nach der Änderung wird der Neustart des Minio -Dienstes wirksam. Konfigurieren von Bucket Access -Berechtigungen: Das Einstellen des Bucket in die Öffentlichkeit führt dazu, dass das Verzeichnis durchquert wird, was ein Sicherheitsrisiko darstellt. Es wird empfohlen, die Richtlinien des Bucket -Zugriffs anzupassen. Sie können Minio verwenden

Kann Visual Studio -Code in Python verwendet werden Kann Visual Studio -Code in Python verwendet werden Apr 15, 2025 pm 08:18 PM

VS -Code kann zum Schreiben von Python verwendet werden und bietet viele Funktionen, die es zu einem idealen Werkzeug für die Entwicklung von Python -Anwendungen machen. Sie ermöglichen es Benutzern: Installation von Python -Erweiterungen, um Funktionen wie Code -Abschluss, Syntax -Hervorhebung und Debugging zu erhalten. Verwenden Sie den Debugger, um Code Schritt für Schritt zu verfolgen, Fehler zu finden und zu beheben. Integrieren Sie Git für die Versionskontrolle. Verwenden Sie Tools für die Codeformatierung, um die Codekonsistenz aufrechtzuerhalten. Verwenden Sie das Lining -Tool, um potenzielle Probleme im Voraus zu erkennen.

So erstellen Sie die MySQL -Datenbank mit PhpMyAdmin So erstellen Sie die MySQL -Datenbank mit PhpMyAdmin Apr 10, 2025 pm 10:48 PM

PHPMYADMIN kann verwendet werden, um Datenbanken in PHP -Projekten zu erstellen. Die spezifischen Schritte sind wie folgt: Melden Sie sich bei PHPMYADMIN an und klicken Sie auf die Schaltfläche "Neu". Geben Sie den Namen der Datenbank ein, die Sie erstellen möchten, und beachten Sie, dass sie den MySQL -Namensregeln entsprechen. Set Zeichensätze wie UTF-8, um verstümmelte Probleme zu vermeiden.

See all articles