2012-07-31 86 views
0

我有很少的php代碼用於日常審計transaction.I使得簡單明瞭。如何將多個查詢從mssql_ *轉換爲PDO mysql

$result = mssql_query("BEGIN TRAN");  
$result = mssql_query("insert into items_history (select * from items)"); //move transaction to history 
$result = mssql_query("delete * from items)");         //clear transaction table for new month transaction 
$result = mssql_query(               //get the data for used in another script 
      "select items_history.item_id, 
       items_history.item_name, 
       group_items.group_name 
      from 
       items_history,group_items 
      where group_items.id=items_history.id and 
       day(items_history.date_trans)=day(items_history.date_trans)-1 "      // whit where include 
      ); 
$result = mssql_query("update trans_control set current_day=current_day+1" }; //update the system date to next day 

if (!$result) { 
    mssql_query("ROLLBACK TRAN"); 
    } else { 
    mssql_query("COMMIT TRAN"); 
    } 
mssql_close(); 

由於某種原因,該數據庫需要使用mysql數據庫在線存儲。 在離線狀態下,我對這段代碼的安全性並沒有多大關注。但在網上,這讓我覺得安全。 現在我想將此腳本轉換爲PDO MySql。 的目標是更安全簡單:

$result = q("BEGIN"); 
$result = q("qry1"); 
$result = q("qry2"); 
$result = q("qry3");// select with many join table and some parameter data in where like 'string','int', 'date', and maybe with "Union All" in select 
$result = q("qry..."}; 

if (!$result) { 
    q("ROLLBACK"); 
    } else { 
    q("COMMIT"); 
    } 

如果一個問題有相同的問題,像這樣的。我是從這個開始,特別簡單的包裝,所以我可以學習它是如何工作的。 謝謝你以前。

+0

我會做如果($結果)$結果= ..否則回滾將只會發生如果你最後的查詢失敗。 – Waygood 2012-07-31 15:00:58

+0

@ Waygood。哦..結果更簡單。謝謝。 – 2012-07-31 16:36:26

回答

0

安全應該是沒有問題的,只要你使用綁定的參數,請參閱www.php.net/manual/en/pdostatement.bindparam.php和http://www.php.net/manual/en/pdostatement.bindvalue.php

併爲您的交易,你可以效仿同樣的事情通過使用這些方法:

http://www.php.net/manual/en/pdo.begintransaction.php,而不是你BEGIN TRAN查詢, http://www.php.net/manual/en/pdo.commit.php而不是COMMIT, http://www.php.net/manual/en/pdo.rollback.php而不是ROLLBACK

但是,如果查詢是完全一個從我的第一個代碼示例我沒有看到任何可能導致安全問題的外部參數

+0

感謝您的鏈接。我將從那裏開始。 – 2012-07-31 16:32:06