2011-11-12 85 views
0

通数据库邮件参数存储prcedure我想用数据库邮件我的应用程序,这意味着我需要将参数传递到存储过程sp_send_dbmail 只是出于测试目的,我有以下的代码。然而,我想知道如何使用ssql server 2008和php将参数传递给存储过程。 仅供参考我使用SQLSRV驱动程序从微软使用PHP和SQL Server 2008

<?php require_once ('../Connection/connmail.php')?> 
<?php 
$sql = "{CALL sp_send_dbmail[[@profile_name='gmailsmtp']]}";//my stored procedure 

    $stmt = sqlsrv_query($conn,$sql)or die(print_r(sqlsrv_errors(),true));  


?> 

上面的代码产生错误

Array ([0] => Array ([0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near '{'. [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near '{'.) [1] => Array ([0] => 42000 [SQLSTATE] => 42000 [1] => 105 [code] => 105 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]Unclosed quotation mark after the character string '[@profile_name='gmailsmtp']}'. [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]Unclosed quotation mark after the character string '[@profile_name='gmailsmtp']}'.)) 

任何帮助将不胜感激

回答

0

我看到了,这是没有答案了一段时间,所以这里是解。让您的用户在msdb系统数据库中的databasemailuserrole

$callmailproc = "EXEC msdb.dbo.sp_send_dbmail @profile_name = ?, @recipients=?, @subject=?, @body=?"; 
$profilename = 'DatabaseMail'; 
$recipients = '[email protected]'; 
$subject='Test Message'; 
$body = 'This is the body'; 
$params = array( 
       array($profilename, SQLSRV_PARAM_IN), 
       array($recipients, SQLSRV_PARAM_IN), 
       array($subject, SQLSRV_PARAM_IN), 
       array($body, SQLSRV_PARAM_IN), 
       ); 

/* Execute the query. */ 
$stmt3 = sqlsrv_query($conn, $callmailproc, $params); 
if($stmt3 === false) 
{ 
    echo "Error in executing statement 3.\n"; 
    die(print_r(sqlsrv_errors(), true)); 
}