我正在另一台服务器上执行存储过程。我希望能够将参数/变量传递给该存储过程。但是,我的代码不胜枚举,因为它在bindParam部分上失败了。

我在线上查看了bindParam和其他示例。我尝试了不同的事物和变化,但似乎没有任何效果。我假设它一定是语法错误,但是代码在编辑器中签出。

try {


    $conn = new PDO("sqlsrv:Server=$server;Database=$database", $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    if($conn){

    echo "Connection is good.... <br />";
    $sql = 'CALL web.WebImportWoRequestDirect (:WebREQUESTEDBY, :WebSTARTDATE, :WebFINISHDATE, :WebTASKDESC, :WebSITEID, :WebLOCATION, :WebPRIORITY, :WebESTDURATION, :WebPHONE, :WebEXT, :WebTEXTS)';

    echo "Stored Procedure has been called....<br />";

    // prepare for execution of the stored procedure
    $stmt = $conn->prepare($sql);
    echo "Preparing SQL Statement... <br />";

    // pass value to the command
    $stmt->bindParam(':WebREQUESTEDBY', 'WEBUSER00001', PDO::PARAM_STR);
    $stmt->bindParam(':WebSTARTDATE', '06-28-2019', PDO::PARAM_STR);
    $stmt->bindParam(':WebFINISHDATE',  '06-29-2019', PDO::PARAM_STR);
    $stmt->bindParam(':WebTASKDESC',  'Title Here...', PDO::PARAM_STR);
    $stmt->bindParam(':WebSITEID',  'UMONCTON', PDO::PARAM_STR);
    $stmt->bindParam(':WebLOCATION',  'Some Place', PDO::PARAM_STR);
    $stmt->bindParam(':WebPRIORITY',  '2', PDO::PARAM_NUM);
    $stmt->bindParam(':WebESTDURATION',  '', PDO::PARAM_NUM);
    $stmt->bindParam(':WebPHONE',  '555-555-5555', PDO::PARAM_STR);
    $stmt->bindParam(':WebEXT', 'MCH1', PDO::PARAM_STR);
    $stmt->bindParam(':WebTEXTS',  'Massive text here...', PDO::PARAM_LOB);

    echo "CHECK - pass value to the command...<br />";

    //Execute the stored procedure...
    $stmt->execute();

    echo "Executed Stored Procedure....<br />";

    #$conn = null;
    }
    echo "Well... ask Gif if it worked...";

} catch (PDOException $e) {
            echo "There is some problem in connection: <br />" . $e->getMessage();
}


我想要的是能够将变量传递给存储过程...

最佳答案

问题1

方法bindParam需要一个变量作为第二个参数。您正在使用字符串。

如果您不想使用变量,则应该使用bindValue方法。

所以是:

$stmt->bindValue(':WebREQUESTEDBY', 'WEBUSER00001', PDO::PARAM_STR);


要么

$webuser = 'WEBUSER00001';
$stmt->bindParam(':WebREQUESTEDBY', $webuser, PDO::PARAM_STR);


问题2

PDO::PARAM_NUM不是有效的常数。请改用PDO::PARAM_INT

关于php - Bind Param不起作用怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57246046/

10-12 01:25