使用PHP PDO类执行MSSQL存储过程


Execute a MSSQL stored procedure using the PHP PDO class

    private function _SP()
{
    $sql = "EXEC [DBNAME].[dbo].[SP_NAME] (?), (?), (?)";
    $sql = $this->_dbconn->_dbcon->prepare($sql);
    //$sql->execute(array($this->_cid, $this->_action_id, $this->_date));
    $sql->bindParam(1, $this->_cid, PDO::PARAM_INT);
    $sql->bindParam(2, $this->_action_id, PDO::PARAM_INT);
    $sql->bindParam(3, $this->_date, PDO::PARAM_STR);
    $sql->execute();
    //print_r($sql);
    return $sql;
/*      foreach($this->_dbconn->_dbcon->query($sql) as $row) 
        {
                echo $row["id"];
        }
*/

我正在努力使用PHP PDO类执行MSSQL存储过程。

注释指出了我尝试过的各种事情,但我似乎没有取得任何进展。

我一整天都在谷歌上搜索,但看起来没有多少人能像我一样把语言结合起来。

如果你能帮助我,请告诉我,或者至少给我一个教程。

感谢

好的,

回答你的问题,

我在一个类中使用它。

返回后,在另一端执行print_r(),得到如下结果:

reports_adv_ajax_errorlogs Object
(
    [_dbconn:reports_adv_ajax_errorlogs:private] => database Object
        (
            [_dbcon] => PDO Object
                (
                )
        )
    [_cid:reports_adv_ajax_errorlogs:private] => 4076158
    [_action_id:reports_adv_ajax_errorlogs:private] => null
    [_date:reports_adv_ajax_errorlogs:private] => '09-Jun-2014'
)

Ok,

所以它不工作的原因是因为PDO不能处理MSSQL DATETIME数据类型。

我通过不绑定参数来解决这个问题,如下所示:
 $sql = "EXEC [DBNAME].[dbo].[SP_NAME] $_cid, $_action_id, $_date";

这不是很安全,但这个特殊的查询不需要。对于select语句,我不推荐使用这种方法。