2013-12-17 69 views
0

我正在使用visual fox pro OLE DB提供程序(vfpoledb.dll)在php中訪問VFP數據庫。我想爲使用PDO或其他數據庫抽象層的相同(或類似)方式編制查詢語句。在PHP中使用Visual FoxPro OLE DB提供程序時避免注入攻擊

有誰知道你是否可以和準備聲明以避免注入攻擊的最佳方式?

$conn = new COM("ADODB.Connection"); 
$conn->Open('Provider=VFPOLEDB.1;Data Source="' . $path . '";'); 

// Bad! 
$up = $conn->Execute("UPDATE tablename SET fieldname='Testing' WHERE fieldname = '" . $value . "'") 

// Good? 
... 

或者如果有人知道哪裏有一個可訪問的方法的引用,雖然這個COM DLL會很棒。

+1

爲什麼你就不能使用'PDO'和'ODBC'? – AbraCadaver

+0

較新版本的VFP中的某些表不支持ODBC驅動程序(請參閱http://msdn.microsoft.com/zh-cn/vfoxpro/bb​​190232) – hygap

回答

1

只是在未來的日子裏走過這條道路的人的更新。

我最終解決使用ADOdb的數據庫抽象庫PHP http://adodb.sourceforge.net/

一個例子這個問題:

  // Path to your dbc file 
      $path = '/path/to/the/file.dbc'; 

      // Create A FoxPro connection 
      $db = ADONewConnection('vfp'); 

      // Create DSN 
      $dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=" . path . ";Exclusive=No;"; 

      // Contact or die trying 
      $db->Connect($dsn) or die('Error connect with Visual FoxPro Driver'); 

      // Set fetch mode (this just makes the return values easier to parse) 
      $db->SetFetchMode(ADODB_FETCH_BOTH); 

      // Your Query - use ? as the var 
      $query = "SELECT fieldname_a, fieldname_b FROM tablename WHERE fieldname_c = ? AND fieldname_d = ?"; 

      // Your Query Params 
      $queryParms = array('valueYouAreSearchingFor_c', 'valueYouAreSearchingFor_d'); 

      // Execute the query 
      $rs = $db->Execute($query, $queryParms); 

      // An example looping the results (>= php5) 
      foreach ($rs as $row) { 

       // Print out examples 
       print_r($row); 
       echo $row["fieldname_a"]; 
       echo $row["fieldname_b"]; 
      } 

      // Don't forget to clean up after yourself 
      $rs->Close(); 
相關問題