我使用visual fox pro OLE DB Provider(vfpoledb.dll)访问php中的VFP数据库。我想以与使用PDO或其他数据库抽象层时相同(或类似)的方式为我将要进行的查询准备语句。
有没有人知道你是否可以以及准备声明以避免注射攻击的最佳方法?
$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访问这些方法,那将是非常棒的。
答案 0 :(得分:1)
只是对未来几天走这条道路的人的更新。
我最终使用ADOdb Database Abstraction Library for 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();