1

我对 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;
    }
    ...
4

0 回答 0