2011-10-07 2 views
4

나는 최근에 본질적으로 독창적 인 프로젝트를 시작했으며 모든 사람으로부터 조언을 얻기를 원했습니다.PHP와 SQL Server - 생각들

asp.net/SQL Server와 php/mysql을 각각 별도로 사용합니다. 나는 그들을 결코 섞어 본 적이 없다. 그러나 현재 프로젝트에서는 SQL Server 백엔드를 사용하면서 PHP를 사용하여 코드를 작성해야합니다.

SQL Server에 연결하는 방법에 대한 기사가 많이 있지만 여기에서 질문하고 싶습니다. 잡았다 고?

MySQL을 사용하는 것과 다른 SQL Server 백엔드에서 PHP를 어떻게 사용합니까?

+5

이제 차이점은 MySQL 구문 대신 MSSQL 구문을 사용해야한다는 것입니다. – NullUserException

+0

@NullUserException ఠ_ఠ : 귀하의 의견은 답변이어야합니다.) – zerkms

+1

한 번에 한 번씩 PHP/MYSQL에서 PHP/MSSQL으로 앱을 변환했습니다. 내가 내 노트를 사냥하자. – mellamokb

답변

8

한 번에 한 번씩 PHP/MySql에서 PHP/MSSQL으로 프로젝트를 변환했습니다. 내가 변환 할 때 내가 찾은 것에 대한 나의 메모를 여기에 제공 할 것이다. 나는 어떤 이유에서든 mssql 대신에 odbc 명령을 사용한 것으로 생각합니다. 왜냐하면 그들은 더 신뢰할만한 것처럼 보였습니다. 특히 같은 페이지에서 여러 개의 쿼리를 수행하는 경우 특히 그렇습니다. 왜 그런지 물어 보지 마십시오.

내 명령 구문 비교 차트 :

*mysql cmd*   *mssql cmd*   *odbc cmd*   *Notes* 
mysql_errno   mssql_errno   odbc_error 
mysql_error   mssql_error   odbc_errormsg 
mysql_select_db  mssql_select_db  unneeded  
mysql_query   mssql_query   odbc_exec   odbc_exec requires the resource link parameter ($db) 
mysql_affected_rows mssql_rows_affected odbc_num_rows 
mysql_num_rows  mssql_num_rows  odbc_num_rows 
mysql_fetch_object mssql_fetch_object odbc_fetch_object 
mysql_close   mssql_close   odbc_close   odbc_close requires the resource link parameter ($db) 
mysql_fetch_array mssql_fetch_array odbc_fetch_array  
mysql_result  mssql_result  odbc_result   odbc_result cannot take a row index as parameter; must cycle with odbc_fetch_row 
mysql_fetch_row  mssql_fetch_row  odbc_fetch_row  odbc_fetch_row does not return the result; use odbc_fetch_row with odbc_result 

내 코드 변환을위한 대체 차트 (말 그대로 문자열을 찾기/바꾸기의 목록을 생성하여이 프로젝트를 수행 할 때까지 전체 코드베이스를 통해 그들을 적용했다 니펫이 더 이상 오류가 남지 않았습니다 :-) :

*old mysql code*          *new odbc code*        *Notes* 
for ($i = 0; $i < mysql_num_rows($result); $i++)  while (odbc_fetch_row($result))    odbc_num_rows doesn't usually work for finding how many rows returned 
mysql_result($result, $i        odbc_result($result       odbc_result can't go request the result for a specific row, have to use odbc_fetch_row 
NOW()            GETDATE()         NOW() function in mysql is GETDATE() in sql server 
if (connect_db())         if ($db = connect_db())      In mysql, you don't have to keep track of the $db resource - with odbc, you do 
if (!connect_db())         if (!($db = connect_db()))     See notes on previous entry 
                odbc_fetch_row($result);     When retrieving a single row, you have to call fetch_row with odbc, but not with mysql 
if (mysql_num_rows($result) == 1)     if (odbc_fetch_row($result))    odbc_num_rows usually doesn't work, so for a single row, just do if odbc_fetch_row 
if (mysql_errormsg() || mysql_num_rows($ASISHSresult) == 0)  if (!odbc_errormsg() && !odbc_fetch_row($ASISHSresult)) 
limit ##, ##          row_number() over (order by ???)   limit function in mysql has to be translated to row_number() function in odbc (also must be inc. by 1 to offset off-by-1 error between mysql and sql server) 
match(body) against ('expr' in boolean mode)  contains(body, 'expr') or containstable(Body, 'expr') fulltext matching in sql server has different syntax than mysql 
text_column = value         cast(text_column as varchar(good_size)) = value  mysql can compare text column to value, sql server cannot without varchar casting 
                odbc_free_result($result);     When you make a lot of connections, you must free results or your future connections may be ignored 

마지막 요점 하나. 이 프로젝트에서했던 것처럼 암호를 암호화하기 위해 내장 된 암호화 명령을 사용한다면, mysql 대신에 php로 암호화를해야합니다.

관련 문제