2015-05-09 100 views
1

我目前正在構建一個PHP站點,該站點必須通過ODBC連接連接到數據源。數據源不常見,驅動程序由客戶提供(不,他們不知道它是如何工作的:))。ODBC INSERT/UPDATE語句觸發內部服務器錯誤(500)

我能夠成功連接到測試數據源,並且SELECT語句正常工作。例如,這可以工作:

$resource = odbc_prepare($connection,'SELECT * FROM [TABLE] WHERE EMAIL=?'); 
$success = odbc_execute($res,array('[email protected]'); 

我能夠從數據庫中讀取任何信息。但是,INSETR/UPDATE語句似乎不起作用:

$resource = odbc_prepare($connection,'UPDATE [TABLE] SET EMAIL=? WHERE ID=?'); 
$success = odbc_execute($res,array('[email protected]',1); 

上述語句返回內部服務器錯誤。它只是說,錯誤與odbc_execute()命令有關。我檢查了Apache錯誤日誌,並且沒有關於可能導致錯誤的信息。

我檢查了存放測試數據庫的文件夾(因爲數據庫只是一堆沒有擴展名和.IDX文件的文件,我的猜測是.IDX文件是實際DB文件的索引文件)並且它們都不是隻讀的。

另外,我給了匿名用戶修改DB文件夾內容的權限(我很絕望),沒有任何效果。

我不認爲在SQL語句中存在錯誤,因爲我嘗試添加語法錯誤,並且收回了有關錯誤的描述性錯誤。

我不能使用odbc_error($connection);,因爲我在到達該行之前出現內部服務器錯誤。

有什麼建議可能是錯的?我會感激每一個提示在正確的方向:)

回答

1

你需要看看ODBC連接。根據您在該服務器上的Windows版本,您想要打開Data Sources (ODBC)。選擇您正在使用的別名。右鍵點擊並選擇配置/編輯(可能有一個按鈕說配置)。檢查Read Only未勾選,並且Execute Proc被打勾。

+0

好吧,我會成爲一個槍的兒子:),真的有更多的選擇。我沒有找到「只讀」或「Execute Proc」選項,但是我確實發現了一些類似的東西(「Nur lesender zugriff auf die tabellemöglich」,德文是「只允許讀表訪問」)。只要我有時間今天,我會嘗試使用這些選項,如果它會工作,我會立即接受你的答案:)。謝謝你的建議 – itd

+0

是的,那是原因。再次謝謝你 :) – itd