问题标签 [freetds]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5369 浏览

php - 在 PHP PDO-ODBC、unixODBC 和 FreeTDS 中使用类型化绑定参数

我正在使用以下设置从 PHP 应用程序访问 MS-SQL 数据库

  • 红帽企业 Linux 5
  • 带有 PDO 和 PDO_ODBC 的 PHP 5.2.14
  • unixODBC 2.2.11
  • FreeTDS 0.82.1.dev.20100810

未参数化的查询工作正常。唯一的问题是被迫关闭单个结果语句上的游标(使用 PDOStatment::closeCursor)以避免“0 [FreeTDS][SQL Server] Invalid cursor state (SQLSTATE=24000)”错误。

但是我遇到了类型绑定参数的主要问题。使用这样的代码时:

其中两列都是 INT。我收到“206 [FreeTDS][SQL Server]操作数类型冲突:文本与 int [SQLSTATE=22018] 不兼容”错误。

在 unixODBC 日志中,我得到类似

我对日志的理解是 unixODBC 正在尝试使用正确的类型绑定参数。但是 FreeTDS 不支持该功能(IM001 是'驱动程序不支持此功能')。所以 unixODBC 在没有正确输入的情况下继续。

有人可以确认此诊断,或者更好的是 FreeTDS 中类型绑定参数的已知问题吗?如果是,它们是否使用 PHP PDO 工作,我可以配置它吗?

0 投票
1 回答
1076 浏览

php - PDO FreeTDS 错误

我刚刚将我的服务器从 php 5.2 升级到 5.3.3,我在 PDO 中遇到了一个奇怪的错误(使用 DBLIB)。

我正在连接到 SQL Server 2005。我遇到错误出现在任何以“N”字母作为参数前缀的语句中(告诉 SQL Server 这是一个 unicode 字符串)。

查询如下所示:

用于在旧设置上正常工作,新设置抛出异常:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

如果我删除参数前面的 N 字符,似乎可以正常工作。但是,我有成千上万这样的陈述,删除它会很痛苦。我宁愿找出为什么会发生这种情况并解决它。

知道如何进行这项工作吗?

谢谢

稍后编辑:感谢仍然站在下面,我发现使用非命名参数(问号)有效。但它仍然让我改变了很多陈述。

所以这有效:

0 投票
1 回答
737 浏览

django - Linux 上的 Django 站点上的 unixODBC 问题在刷新时消失

我有一个关于 Django、unixODBC、FreeTDS、Apache2、mod_wsgi 的问题,这有点类似于之前在 SO 上提出的这个问题。

我有一个 Django 网站,可以在最新的 Django 上运行,即 1.2.3。它在大多数情况下使用托管模型,因为除了会话信息之外,Django 不会将任何内容写入数据库,而只会从中读取。

有问题的数据库托管在 MSSQL 2005 上的 Windows 机器上。

Django 项目托管在 Linux 机器上。它通过 Apache2 上的 mod_wsgi 提供服务。数据库连接是通过臭名昭著的 FreeTDS 和 unixODBC duo。FreeTDS 和 unixODBC 的最新版本正在运行。在 Python 端,pyodbc 和 django-pyodbc 用于 DB 的东西。

该项目部署在两个 Linux 实时服务器上,具有相同的设置,位于负载均衡器后面。有一个数据库服务器都连接到。

在实时生产服务器上,存在一些间歇性问题。在查询数据库以获取要显示的记录的页面上,有时,我的意思是有时,会引发异常,并出现错误:

这个难题的一个奇怪之处在于,每当您收到此错误时,只需在 Web 浏览器上点击刷新即可将其清除,并使用从数据库中获取的记录来呈现页面。

错误发生时从调试输出生成的 SQL 非常简单:

当然,在 Django 开发服务器上,这不会出现。在开发机器上,mod_wsgi 以守护程序模式运行,我多次遇到此错误。我通过部署在 mod_python 上进行了测试,我没有看到任何错误。然后我在嵌入式模式下使用 mod_wsgi 进行了测试,同样,我没有看到任何错误。我认为将实时服务器上的设置更改为在嵌入式模式下使用 mod_wsgi,但有时仍然会出现错误。

我真的坚持这一点。我不确定要尝试什么才能更接近找出真正导致问题的原因。我不确定我是否提供了所有有用的信息。如果我没有,请指出,我会更新问题。

我不相信代码中有任何错误并导致此问题。如果是这种情况,它不会在大部分时间或所有时间都有效。我尝试在实时服务器上清除 .pyc 文件、重新启动 Apache 等,但无济于事。

任何,任何帮助将不胜感激。

谢谢。

更新:我将“never_cache”装饰器添加到大多数视图函数中,希望也许可以关闭 Django 所做的任何小的模型级缓存。但这在实时服务器上并没有真正做任何事情。我现在真的没有主意了。

更新#2:我在sql_sever/pyodbc/base.py生成异常的代码周围添加了一些日志记录(django-pyodbc)。而且我有更多的 SQL 查询,显然,产生了难以捉摸的错误:

0 投票
1 回答
2068 浏览

ruby-on-rails - 为什么 .so 文件确实存在时会出现“没有这样的文件或目录”错误?

我正在尝试从 RHEL 5 上的 Ruby 1.8.7 连接到 MS SQL Server。我正在使用FreeTDStiny_tds RubyGem。

我让它在 OS X 上运行良好。

在 Linux 上我安装了 FreeTDS 并确认它可以从命令行连接到 SQL Server 没有问题。一切gem install tiny_tds顺利。

但是,当我部署到 Linux 并尝试打开 Rails 控制台时,我收到此错误:

我检查了它说它找不到的这个文件实际上确实存在于文件系统上......

任何想法如何让它发挥作用?

0 投票
3 回答
8046 浏览

php - unixODBC 错误“/usr/lib/libtdsodbc.so.0:错误的 ELF 类:ELFCLASS32”

我正在一个网站上工作,我需要通过 PHP 将远程 MS SQL Server 数据库中的数据导入 Unix 服务器上的 MySQL 数据库。感谢对这篇文章的回答,我能够在我的开发环境(Mac OS X 10.6)上启动并运行所有内容。然而,现在我正在尝试设置我的服务器环境,即 CentOS 5.4。我安装并配置了 unixODBC 和 FreeTDS,但是当我尝试连接时,我收到以下错误:

Connection Failed:[unixODBC][Driver Manager]Can't open lib '/usr/lib/libtdsodbc.so.0' : /usr/lib/libtdsodbc.so.0: wrong ELF class: ELFCLASS32

从我在互联网上找到的信息来看,我似乎安装了 32 位 unixODBC(或 FreeTDS,我不确定)(libtdsodbc.so.0 符号链接到 libtdsodbc.so.0.0.0)和它需要是 64 位的。那是对的吗?如果是这样,我如何升级到 64 位版本?我是开发人员,而不是服务器专家,所以这有点超出我的服务器知识。

谢谢。

0 投票
2 回答
583 浏览

ruby-on-rails - 从 Ubuntu 中的 ROR 应用程序连接到 SQL Server 2005

我尝试从 Ubuntu 中的 ROR 应用程序连接到 SQL Server。为此,我做了以下事情。

我在我的 Ubuntu 10.04 中安装了以下库

  • unixodbc
  • unixodbc-dev
  • freetds-开发
  • libdbd-odbc-ruby
  • tdsodbc

安装这些之后,我创建了 dsn 并在 odbc.ini 和 freetds.conf 文件中进行了必要的更改。

然后我使用“tsql”测试了连接,如下所示

对于此命令,我收到以下错误

Adaptive Server is unavailable

我还检查了 freetds 日志;它说“连接超时”。

我确信我们对 SQL Server 端的配置(远程)很好。

当我运行tsql -C它时它说 TDS 版本是 5。我不确定它是如何说 TDS 5,因为我安装了最新的 FreeTDS 版本。而且我不知道如何更新我的 TDS 版本。

仅供参考,我听说 TDS 版本 5 不能用于与 SQL Server 建立连接。那正确吗?

请指导我

谢谢,尼奥

0 投票
5 回答
42458 浏览

python - SqlAlchemy 等效于使用 FreeTDS 的 pyodbc 连接字符串

以下作品:

以下失败:

上面的错误信息是:

DBAPIError: (Error) ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]无法连接到数据源 (0) (SQLDriverConnectW)') 无 无

有人可以指出我正确的方向吗?有没有一种方法可以简单地告诉 sqlalchemy 将特定的连接字符串传递给 pyodbc?

请注意:我想保留这个 DSN-less。

0 投票
1 回答
20218 浏览

sql-server - Ruby 连接到 SQL Server

我在将 Ruby 连接到 Microsoft SQL Server 时遇到问题。我正在运行 Mac OS X,但目标环境是 Ubuntu Linux。

这是我尝试过的:

  • 安装unixODBC
  • 安装FreeTDS
    • 使用了选项--with-unixodbc=/usr/local/etc --with-tdsver=8.0

然后我有这些文件/usr/local/etc

  • odbc.ini
  • odbcinst.ini
  • freetds.conf

odbcinst.ini我在我的 ODBC 驱动程序文件中添加了对文件中 FreeTDS 驱动程序的引用,如下所示:

然后我freetds.conf像这样在文件中配置服务器:

最后我在odbc.ini文件中添加了 ODBC DSN,如下所示:

我可以验证我的服务器是否在线并且端口是否打开(通过 telnet 和 yougetsignal.com 端口检查)。

作为测试,我这样做了:

它似乎连接得很好。传入无效值会导致预期错误。

所以最后我的问题:

如何将其扩展到 Ruby?到目前为止,我尝试过的任何方法都没有奏效。我试过这样的续集:

我收到这样的错误:

这告诉我它正在正确找到我的驱动程序配置,但由于某种原因无法连接。

我也尝试过这样的 DBI:

我得到一个类似的错误。

有什么建议么?我觉得我已经很接近了,但不确定接下来要尝试什么来解决这个问题。

0 投票
2 回答
3953 浏览

php - ADODB / SQL Server mssql_execute 存储过程失败,但如果 debug 设置为 true 则有效

我正在使用 ADODB 从 PHP 连接到 SQL Server 数据库。我有几个存储过程,我一直在执行得很好。由于某种原因,我创建的最后一个调用一直失败。我将调试设置为 true,它工作得很好。我不知道为什么会这样。

这是我得到的错误

这是我创建的将所有存储过程传递给的方法,就像我说它与其他存储过程一样,但是这个方法和我已经仔细检查了参数和存储过程的所有拼写是否正确。

它在 adodb5/drivers/adodb-mssql.inc.php 的 #768 行失败

并且 sql 数组具有这些值

我在 PHP.net 上看到了以下评论,我将 freetds 主机名更改为与 IP 地址不同的名称,但仍然没有。由于我使用的是 adodb,因此我不确定免费结果。

http://www.php.net/manual/en/function.mssql-execute.php#93938

我正在使用 adodb 5.11

0 投票
1 回答
6600 浏览

php - 如何使用 FreeTDS 连接到 Sybase?

我的 freetds.conf

我的sybase.php

当我通过 CLI 运行它时,它工作得很好,php sybase.php. 但是当我通过网络服务器运行它时它不会连接。有谁知道我的代码有什么问题?

我也试过把

putenv("FREETDSCONF=/usr/local/etc/freetds.conf");

但是什么也没发生,我什至尝试过输入错误的路径,freetds.conf并且sybase_connect()代码仍然可以正常运行(使用php sybase.php但不通过网络服务器)。

顺便说一句,每次我重新启动我的 apache 时都会遇到这些错误:

自从我在 Linux 中工作以来;extension=php_sybase_ct.dll,我没有取消注释。php.ini我检查了我的phpinfo(),我可以看到sybase_ct其中的部分。我使用这些参数构建了我的 PHP: