I have recently taken on a project that is unique in nature and wanted to get some advice from everyone.
I use both asp.net/SQL Server and php/mysql each separately. I've never mixed them up. However, my current project requires me to write code using PHP while using a SQL Server backend.
I've found plenty of articles on how to connect to SQL Server, but wanted to ask a question here. What are the gotchas?
How is using PHP with a SQL Server backend different than using MySQL?
I converted a project from PHP/MySql to PHP/MSSQL once upon a time. I'll provide my notes here of what I found as I was converting. I think for some reason I ended up using the odbc
commands instead of mssql
because they seemed to be more reliable, especially if you are doing multiple queries in the same page - don't ask me why, that's just what I found.
My command syntax comparison chart:
*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
My code snippets replacement chart for conversion (I had literally done this project by generating a list of FIND/REPLACE strings and applied them across the entire code base until there were no more errors left :-):
*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
One last point. If you make use of the built-in encryption commands to encrypt passwords as we did in this project, you'll need to do the encryption in php instead of mysql.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With