Pages

Subscribe:

Ads 468x60px

Labels

2015年9月3日 星期四

Using ODBC with PHP

資料來源


Using ODBC with PHP ODBC is one of Microsoft's earliest technologies for connecting to databases. It is very popular and widely used. This article describes how to setup and use ODBC from a PHP perspective.
Also see DSN-less connections with PHP.

What is ODBC?

Open DataBase Connectivity is an Application Programming Interface (API) that allows a programmer to abstract a program from a database. When writing code to interact with a database, you have to add code that talks to a particular database using a proprietary API. If you want your program to talk to an Access, FoxPro and Oracle databases you have to code your program with three different database API's. This can be quite the daunting task causing much grief. Now, enter ODBC...
When programming to interact with ODBC you only need to use the ODBC API (a combination of ODBC extension function calls and the SQL language) to talk to different database products. The ODBC Manager will figure out how to contend with the type of database you are targeting. Regardless of the database type you are using, all of your calls will be to the ODBC API. All that you need to do is have installed an ODBC driver that is specific to the type of database you will be using.

Creating A ODBC Data Source Name (DSN)

After you have ensured that the ODBC driver for your database is installed, you normally need to create a Data Source Name (DSN), which contains all the connection details required to login (accept maybe id and password).
Walkthrough: How to Setup a DSN. A pictorial step-by-step guide. The next button is hidden on the bottom-right. Sorry but we Windows programmers are not user interface experts ;-)

Connecting to ODBC

There is an excellent tutorial on using PHP's ODBC extension at ASPToday, a popular ASP web site.
An example taken from the above article:

# query the users table for name and surname
$query = "SELECT name, surname FROM users";
# perform the query $result = odbc_exec($connect, $query);
# fetch the data from the database while(odbc_fetch_row($result)){ $name = odbc_result($result, 1); $surname = odbc_result($result, 2); print("$name $surname\n"); }
# close the connection odbc_close($connect); ?>

odbc 在 windows 7 找不到 sql server 2005

資料來源

狀況
本人有一台 sql server 2005 在 winxp 下設定 odbc 都可以順利設定好 odbc,並且讀取寫入資料都沒問題,可是到另一台電腦 win7 32位元 旗艦版,在 設定 odbc [系統資料來源名稱] 時就無法,自動抓到伺服器名稱,odbc 的驅動除了win7 的SQL SERVER 外,並再加裝了 SQL Natine Client 及 ODBC Driver 11 for SQL SERVER 也是抓不到伺服器名稱,一直試不出來,各位狐友先進們,可有遇到如此情形啊..感謝賜教

找找在 
c:\windows\system32\下有沒有 odbcad32 
執行它,用這個來安裝看看

防火牆關掉試試,若可以連的話 
1433 port 要打開

有關windows7執行vfp6的程式,去連線主機的sql server2008,經常會當掉或很慢導致資料遺失!!

資料來源

狀況
各位大大好,好久沒有在上面提出問題了, 
不過這陣子有個問題困擾我一段時間了,不知各位大大有什麼看法!! 

我本身有一套在xp開發的vfp6的程式!! 
安裝在客戶的xp電腦後連線到主機的sql server執行上都不會當掉也不會突然變慢, 
但開始客戶換電腦後,變成部份win7電腦,問題開始發生了 

客戶同時有好幾台電腦程式在存取主機的sql server2008, 
xp電腦的程式就跑的很順不會當也不會突然變慢, 
但win7電腦的程式就會跑的突然變慢,或者還會開一陣子程式後會突然當掉 

解決

若你的exe檔 是放在一台主機,使用分享目錄的方式,則win7會變很慢!ms 在win7,win8以後,將很多權限控管收回 
支持這種samba 變的很不穩定!

sqlstringconnect建議用ip連,不要用主機名稱連

我的經驗是:用WIN7 +SPT (ODBC指定IP連),且不用VIEW ,50臺電腦跑,速度均一致!(後台一樣SERVER2008 64BIT) 
不會有XP比較快....................請查一下你的線路及HUB,這方向思考看看! 
最簡單的是留一台 WIN7工作站+SERVER,就這兩台串在一個HUB上來測試一下!


在Windows 7 設ODBC無法連上 Server端之SQL server 2008 r2

資料來源
狀況
在Windows 7 設ODBC無法連上 安裝在Windows server 2012 R2 foundation 之 
SQL server 2008r2 

連線失敗: 
Sqlstate :'01000' 
Sql server 錯誤:10061 
[Microsoft][ODBC Sql Server Driver][TCP/IP Sockets] connectionOpen(Connect()) 
連線失敗: 
Sql State:'08001' 
Sql Server 錯誤:17 
[Microsoft][ODBC Sql Server Driver][TCP/IP Sockets]SQL Server 不存在或拒絕存取。 

通常問題在 sql server 2008 r2 上. 

1.先確認client pc 及 server 的防火牆有沒有開啟. 不確定PORT有沒有開對就先關掉. 
2.sql server 2008 r2 的 Configutration Manager 中,每個 SQL Native Configuration 中的 TCP/IP 是不是 Enable,port 對不對 
3.sql server 2008 r2 的 Configutration Manager 中,SQL Server Services 中的 SQL Server Browser 及 SQL Server Agent 是不是 running ,不是就啟動一下. 
4.如果是 X64 版的WIN7, ODBC 是這個才對. C:\Windows\SysWOW64\odbcad32.exe

該如何讓VFP控制bartender列印標籤?

資料來源

參考 http://www.programmer-club.com.tw/showSameTitleN/csharp/11499.html 

如果按照網頁所寫的方法,
在VFP只要一行指令就完成.

run "C:\Program Files\Seagull\BarTender UltraLite Plus\8.0\bartend.exe" /f 標籤檔名 /P /X

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.

VFP 連線 SQL 2008 R2 Express 的字串連線寫法

資料來源

Sql Server 是 ConnString="Driver=SQL Server;Server=192.168.1.205;uid=sa;pwd=123;Database=NorthWind"

ConnString="driver=SQL Server Native Client 10.0;server=ComputerName\SQLEXPRESS;uid=sa;pwd=123;database=NorthWind" 

2015年9月2日 星期三

Apache 整合 Acitve Directory 達成 one single signon


我的公司使用AD進行使用者驗證,因此在使用者操作的便利性考量前提下.如何讓使用者不需要重覆輸入帳號與密碼,而直接抓取使用者已經登入AD的帳號資訊,已經變成系統開發必須要考量的項目之一 (至少我自己是這樣認為啦 @@)
.NET整合AD的資訊已經有大大實做成功並且實際運用於目前的系統上.由於都是微軟家族的產品,因此整合上比較容易.
但是目前公司存在有Apache+PHP+MySQL on Windows的架構,因此如何讓這樣的架構也可以快速的抓取使用者AD資訊是我今天要介紹的項目.
[版本需求]
1. Apache 2.x 以上
2. PHP和MySQL都沒有特殊的版本要求,不過我還是建議安裝PHP 5.x和MySQL 4.1.x以上的版本
[安裝過程]
1. 將mod_auth_sspi.so (下載位址)放到path_to_apache/modules這個目錄下面
2. 在httpd.conf裡面加上下面兩段
  (1) LoadModule sspi_auth_module modules/mod_auth_sspi.so
  (2)在需要進行驗證的目錄設定加上下面的內容,並且將AllowOverride開啟
      AuthName "A Protected Place"
      AuthType SSPI
      SSPIDomain tpe.compalcomm.com
      SSPIAuth On
      SSPIAuthoritative On
      SSPIOfferBasic On
      require valid-user
          
    修改後應該會像這樣
   
     Options Indexes FollowSymLinks
     AllowOverride All
     Order allow,deny
     Allow from all
     AuthName "A Protected Place"
     AuthType SSPI
     SSPIDomain tpe.compalcomm.com
     SSPIAuth On
     SSPIAuthoritative On
     SSPIOfferBasic On
     require valid-user
 

3. 重新啟動Apache
[如何抓取使用者登入AD的帳號]
程式只有一行,真的只有一行.
$_SERVER["REMOTE_USER"] 就只需要這行就可以抓到使用者登入AD的帳號.
後面要怎麼達成one single signon,我相信各位程式高手都知道該怎麼做了,我就不獻醜了.
[如何抓取使用者在AD中的其他資訊]
我之前有找到一個adLDAP.php的class,只需要確定ldap_binding正常,
然後將剛剛抓到的使用者AD帳號傳進去,AD裡面所有的資訊全部都可以抓出來.
adLDAP http://adldap.sourceforge.net/