我对 COM 类一点也不熟悉,而且几年来我也没怎么用过 PHP,所以我真的很挣扎。此时,我只是尝试重新配置代码以防止 SQL 注入。尽快完成这项工作有一个截止日期,所以现在我需要寻求帮助。
这是原始的连接声明。
$conn = new COM ("ADODB.Connection") or die("Cannot start ADO");
$conn->open ("PROVIDER=MSOLEDBSQL;SERVER=".$servername.";UID=".$user.";PWD=".$pwd.";DATABASE=".$db);
我以为我可以使用准备好的语句或绑定,但是当我这样做时,我得到一个“无法通过引用传递参数 2”的错误。
$sql = "SELECT * FROM Account WHERE User=?";
$rs= $conn->Execute($sql,array($user));
Uncaught Error: Cannot pass parameter 2 by reference in...
我还尝试了类似于 adodb.org 页面上记录的内容,结果相似。
$bindVars = array('$user');
$sql = "SELECT * FROM Account WHERE User=?";
$rs = $conn->execute($sql,$bindVars);
Uncaught com_exception: Microsoft OLE DB Driver for SQL Server
No value given for one or more required parameters.
我得到的错误使它看起来像是其中之一(或可能两者)是可能的,但我似乎找不到可以使这项工作的正确参数组合。可以将其中之一配置为工作吗?如果是这样,怎么做?
如果不可能,那么我将尝试为 mysqli 重新配置(他们也有一个 MySQL 数据库),并且可能不得不重写整个站点。这是当前代码的几个片段。如果我不得不改用 MySQLi 驱动程序,有没有人有一个很好的例子,可以将这样的东西翻译成可以工作的代码?
if ( (isset($_SESSION['userid'])) && (is_numeric($_SESSION['userid'])) ) {
$item = isValidItem($_GET['item']);
$enddate = strtotime($item->Fields['EndDate']->value);
if (is_numeric($_POST['amount'])) { $_SESSION['amount'] = $_POST['amount']; }
if ((is_null($item) == false) && (isset($_SESSION['amount'])) && (isValidBid($item,$_SESSION['amount']))) {
$highestbidder = $item->Fields['UserID']->value;
...
function isValidBid($item,$amount) {
$currentbid = $item->Fields['CurrentBid']->value;
$startdate = strtotime($item->Fields['StartDate']->value);
global $enddate;
if (time() > ($enddate - 300)) {
if (($amount-$currentbid) < 50) {
alert("Invalid bid amount");
session_destroy();
return false;
}
...