php mssql select *无效

时间:2012-08-14 05:03:15

标签: php sql-server-2008

我收到错误

No data! (sqlJadual)

来自此查询

mssql_query("SELECT * 
             from tblstatusjadual 
             where idjadual like '1%' and 
                   tahun='2011' 
             order by idjadual") or die('No data! (sqlJadual)');

但是,当我把它改为

mssql_query("SELECT idjadual,status 
             from tblstatusjadual 
             where idjadual like '1%' and 
             tahun='2011' 
             order by idjadual") or die('No data! (sqlJadual)');

它工作正常。

如果我只选择2个字段,那就没关系,但是当我想选择超过15个字段时,查询会变得冗长而且令人困惑。

我的问题是mssql在他们的查询中不支持select *吗?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

这取决于列的数量及其类型。可能是(例如)其中一个列类型是BLOB,并且驱动程序确保它在行数据结构中有2GB可用来保存它(我之前在一些编写错误的JDBC驱动程序中看到过这一点)。

检查的最佳方法是逐渐将其他列(scheduleyear除外)添加到第二个查询,直到失败。这可能会告诉你错误的列,如果有的话。

另外,将die语句更改为:

die(mssql_get_last_message())

所以你可以希望看到失败的信息。

并且,基于您对此的回应:

  

无法使用DB-Library(例如ISQL)或ODBC 3.7或更早版本,无法将仅使用Unicode的归类或ntext数据中的Unicode数据发送到客户端。

看起来您的数据库与您用来访问它的库之间的功能不匹配。

由于Unicode通常被认为是的东西,我会坚持认为,并且看看是否有更高版本的MSSQL(或底层的ODBC驱动程序)可以处理它。 / p>

This page也有一些建议可以解决您的问题:


当您收到此错误消息时:     “仅限Unicode的归类或ntext数据中的Unicode数据不能      使用DB-Library(例如ISQL)或ODBC发送给客户端      版本3.7或更早。“

在/etc/freetds/freetds.conf中添加这两行(最后两行):

[global]
;tds version = 4.2
tds version = 8.0
client charset = UTF-8

您也可以在php.ini中编辑“charset”(但如果您以前在freetds.conf中执行过此操作则不需要):

; Specify client character set..
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
mssql.charset = "UTF-8"

答案 1 :(得分:0)

我在这里提到我的评论作为答案'因为它帮助了你,并且下次有人访问/面对类似的情况时,他/她可以参考这个(而不是扫描上述评论的全部字符串'系列)。

如果您针对SELECT *表格发出MSSQL,并且您的表格中包含一个空白字符串的TEXT列,则

1)将该列的数据类型更改为varchar
2)将列的值从空白字符串重置为NULL

使SELECT *正常工作。

(另一方面,我建议您不要使用SELECT *,而只在查询中包含您真正需要的那些列。)