1 頁 (共 1 頁)

[問題] 用MS SQL Server 架站無法貼文問題

發表於 : 2004-02-15 09:35
fjguo
我是用 Windows 2000 + IIS 5 + SQL Server 2000 ODBC 架站
及果貼文有時可以有時不行

:arrow: 視窗外出現以下錯誤:

Warning: odbc_exec(): SQL error: [Microsoft][ODBC SQL Server Driver]COUNT 欄位不正確或語法錯誤, SQL state 07001 in SQLExecDirect in F:\PHP\phpBB2\db\mssql-odbc.php on line 117

Warning: Cannot modify header information - headers already sent by (output started at F:\PHP\phpBB2\db\mssql-odbc.php:117) in F:\PHP\phpBB2\includes\page_header.php on line 474

Warning: Cannot modify header information - headers already sent by (output started at F:\PHP\phpBB2\db\mssql-odbc.php:117) in F:\PHP\phpBB2\includes\page_header.php on line 476

Warning: Cannot modify header information - headers already sent by (output started at F:\PHP\phpBB2\db\mssql-odbc.php:117) in F:\PHP\phpBB2\includes\page_header.php on line 477

:arrow: 視窗裡還有錯誤訊息:

Could not select words

DEBUG MODE

SQL Error : 07001 [Microsoft][ODBC SQL Server Driver]COUNT 欄位不正確或語法錯誤

SELECT word_id, word_text FROM phpbb_search_wordlist WHERE word_text IN ('aldous', 'com', 'edirect168', 'email', '社區醫學研究群所研發', '者殃誰', '研究學?, '計者及維?, '負責卻管', '部份', '最早殃在鹿谷鄉使用', '請裴')

Line : 172
File : F:\PHP\phpBB2\includes\functions_search.php

發表於 : 2004-02-15 10:30
fjguo
就我有限的 SQL 知識, 應該是下列查詢出問題

:arrow: SELECT word_id, word_text FROM phpbb_search_wordlist WHERE word_text IN ('aldous', 'com', 'edirect168', 'email', '社區醫學研究群所研發', '者殃誰', '研究學?, '計者及維?, '負責卻管', '部份', '最早殃在鹿谷鄉使用', '請裴')

因為 in 後面的字串有一些應該用 ' 號標示起來的現在變成 ? 號

這句查詢是 F:\PHP\phpBB2\includes\functions_search.php 中第 167行

:arrow: $sql = "SELECT word_id, word_text
FROM " . SEARCH_WORD_TABLE . "
WHERE word_text IN ($word_text_sql)";

所產生, 問題出在 $word_text_sql 這個變數\r
尋找程式碼以後, 這個變數是在第 146 行產生

:arrow: $word_text_sql = '';
$temp_word = array();
for($i = 0; $i < count($word); $i++)
{
if ( $word[$i] != $prev_word )
{
$temp_word[] = $word[$i];
$word_text_sql .= ( ( $word_text_sql != '' ) ? ', ' : '' ) . "'" . $word[$i] . "'";
}
$prev_word = $word[$i];
}

應該是這裡出問題, 可是我看不懂, 有高手可以解惑嗎 ?

理論上這像是中文才會有的問題, 可能是 F:\PHP\phpBB2\db\mssql-odbc.php 造成的, 所以使用 MS SQL Server 2000 ODBC 的人應該都有相同的問題

發表於 : 2004-02-15 11:33
streitleak
fjguo 寫:
:arrow: $word_text_sql = '';
這裡錯了....$word_text_sql = "";才對...讓他為空集合..內容未清的話...

後面的資料可能還有保留....

fjguo 寫: $word_text_sql .= ( ( $word_text_sql != '' ) ? ', ' : '' ) . "'" . $word[$i] . "'";
這段也是.... 改成(($word_text_sql !="")?',':"")."".$word[$i]."";
這樣試試看....

發表於 : 2004-02-15 15:00
fjguo
試過了, 無效\r

我在 Function_search.php 第92行找到一段話

function split_words(&$entry, $mode = 'post')
{
// If you experience problems with the new method, uncomment this block.
/*
$rex = ( $mode == 'post' ) ? "/\b([\w接-?][\w接-?']*[\w接-?]+|[\w接-?]+?)\b/" : '/(\*?[a-z0-9接-?]+\*?)|\b([a-z0-9接-?]+)\b/';
preg_match_all($rex, $entry, $split_entries);

return $split_entries[1];
*/
// Trim 1+ spaces to one space and split this trimmed string into words.
return explode(' ', trim(preg_replace('#\s+#', ' ', $entry)));
}

我把它 unmark 以後還是會出現錯誤訊息, 但是一秒鐘以後就回到討論版畫面, 而且貼文成功

我想錯誤畫面應該是表示 search 的功能沒有了

無論如何, 這樣可以貼文了, 只是錯誤畫面會閃一下, 很不漂亮\r
希望還有高手指導

發表於 : 2004-03-20 02:46
kstsabc
我也是用MS SQL..
我在2.0.7版時.中文字的處理上也會有這樣子的問題.
不過我把那段文字unmark時.
已經沒有錯誤畫面.
而且.用搜尋功能時.也沒有任何問題.^^

[問題]應該找到了

發表於 : 2004-05-03 10:46
chenmuen
我找到問題點了...
正在爬官方網站

Re: [問題]應該找到了

發表於 : 2004-05-03 10:53
kstsabc
那照著那份文件的說明把原文make起來會有問題嗎? :roll:
chenmuen 寫:我找到問題點了...
正在爬官方網站

發表於 : 2004-05-03 11:11
chenmuen
官網的forum上
有人反應給PHPBB BUG TRACKER這樣的問題
但BUG TRACKER認為這不是PHPBB的問題
所以總規有二個方式可以處理這個
1.修改PHP.ini 若是web hosting的用戶可能無法修改\r
2.修改db/mssql-odbc.php

目前看起來都是可行的
主因是因為string truncated
4K大小的限制\r

我先在我的機器work一下...沒問題再把solution貼上來

發表於 : 2004-05-03 14:41
ady9b
chenmuen 寫:官網的forum上
有人反應給PHPBB BUG TRACKER這樣的問題
但BUG TRACKER認為這不是PHPBB的問題
所以總規有二個方式可以處理這個
1.修改PHP.ini 若是web hosting的用戶可能無法修改\r
2.修改db/mssql-odbc.php

目前看起來都是可行的
主因是因為string truncated
4K大小的限制\r
\r
我先在我的機器work一下...沒問題再把solution貼上來
咦...難不成我的文章會被截掉,是這裡的問題?
我覺得很有可能耶... 我也試看看好了...

不過,要改什麼啊 :?:

發表於 : 2004-05-03 14:49
chenmuen
我已經突破4K的限制了...

發表於 : 2004-05-03 14:52
ady9b
chenmuen 寫:我已經突破4K的限制了...
但問題又來了
好像是中文編碼的問題
現在出現\r
怎麼突破的啊,教一下吧...
:mrgreen:

發表於 : 2004-05-03 15:16
chenmuen
若是你可以修改php.ini
先找到\r
; Valid range 0 - 2147483647. Default = 4096.
mssql.textlimit = 4096
; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 4096

將4096改成你要的大小,我是改成了262144(也就是256K)

若你是使用ODBC來連結
再找到\r
odbc.defaultlrl = 4096
將4096改成你要的大小,我是改成了76400

這二個數值好像沒有比例的關係

在mssql.php找到\r
return $this->db_connect_id;
在它前面加一行
mssql_query("set textsize 76800");
裡面的數字就是你可以讀到的內容大小了
或者把第140行的SQL敍述改成
$this->result = mssql_query("set textsize 76800 SELECT $query", $this->db_connect_id);
數字一樣是你要讀到的內容大小

原文: http://www.phpbb.com/phpBB/viewtopic.ph ... mssql+odbc

發表於 : 2004-05-03 15:55
ady9b
問題解決了,真感謝.... :-D