Problema ao usar variáveis SQL Server no PDO
04/08/2015
0
public function getPercentualBolsa() {
$sql = "DECLARE @CODCOLIGADA INT , @IDPERLET INT , @RA VARCHAR(30) , @CONTCONTRATO INT
SELECT @CONTCONTRATO = COUNT(*),@CODCOLIGADA = C.CODCOLIGADA , @IDPERLET = C.IDPERLET , @RA = C.RA FROM CORPORERM.DBO.SCONTRATO C
INNER JOIN CORPORERM.DBO.SALUNO A ON A.CODCOLIGADA = C.CODCOLIGADA AND A.RA = C.RA
INNER JOIN CORPORERM.DBO.PPESSOA PP ON PP.CODIGO = A.CODPESSOA
INNER JOIN CORPORERM.DBO.SPLETIVO PL ON PL.CODCOLIGADA = C.CODCOLIGADA AND PL.IDPERLET = C.IDPERLET
WHERE PP.CODUSUARIO = '0001789' AND PL.CODPERLET = '2015/2' AND ISNULL(C.STATUS,'') <> 'S'
GROUP BY C.CODCOLIGADA,C.IDPERLET,C.RA
IF
@CONTCONTRATO > 0
BEGIN
SELECT B.NOME,C.DESCONTO,CASE WHEN COUNT(*) > 0 THEN 'SIM' ELSE 'NAO' END BOLSISTA FROM CORPORERM.DBO.SBOLSAALUNO C
INNER JOIN CORPORERM.DBO.SBOLSA B ON B.CODBOLSA = C.CODBOLSA AND B.CODCOLIGADA = C.CODCOLIGADA
WHERE C.RA = @RA AND C.IDPERLET = @IDPERLET AND C.CODCOLIGADA = @CODCOLIGADA
AND C.CODBOLSA IN (2,10)
AND ISNULL(C.ATIVA,'S') = 'S' AND '2015-09-10' BETWEEN C.DTINICIO AND C.DTFIM
GROUP BY B.NOME,C.DESCONTO
END
ELSE
SELECT B.NOME,C.DESCONTO,CASE WHEN COUNT(*) > 0 THEN 'SIM' ELSE 'NAO' END BOLSISTA FROM CORPORERM.DBO.SBOLSAALUNO C
INNER JOIN CORPORERM.DBO.SALUNO A ON A.CODCOLIGADA = C.CODCOLIGADA AND A.RA = C.RA
INNER JOIN CORPORERM.DBO.SPLETIVO PL ON PL.CODCOLIGADA = C.CODCOLIGADA AND PL.IDPERLET = C.IDPERLET
INNER JOIN CORPORERM.DBO.SBOLSA B ON B.CODBOLSA = C.CODBOLSA AND B.CODCOLIGADA = C.CODCOLIGADA
WHERE C.RA = @RA AND C.CODCOLIGADA = @CODCOLIGADA AND PL.CODPERLET = '2015/1'
AND C.CODBOLSA IN (2,10)
AND ISNULL(C.ATIVA,'S') = 'S'
GROUP BY B.NOME,C.DESCONTO
";
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt;
}
já tentei retirar o prepare usando apenas
$stmt = $sql, mas mesmo assim não funciona.
Samuel Lopes
Posts
04/08/2015
William
Quanto ao seu código não vi você chamando o "fetch" dos dados, exemplo:
$dados = $stm->fetchAll(PDO::FETCH_OBJ);
05/08/2015
Samuel Lopes
#Código
$conexao = new conexao('bd');
$db = $conexao->connect();
$codusuario = $_GET['codusuario'];
$model = new modelAdaptacaoDependencia($db);
$stmt = $model->getPercentualBolsa();
$rw = $stmt->fetchObject();
print $rw->NOME;
06/08/2015
William
06/08/2015
William
26/11/2015
Samuel Lopes
Sentença na procedure
DECLARE PROCEDURE verificaDtAdmissao as DECLARE @DIA_SEMANA INT SET @DIA_SEMANA = (DATEPART(DW,DATEADD(day, 2, getdate()))) SELECT @DIA_SEMANA AS DIAS
Código PHP
public function retornaDiasData($data) { $sql = "EXEC verificaDtAdmissao"; $stmt = $this->db->prepare($sql); $stmt->bindParam(":data", $data, PDO::PARAM_STR); $stmt->execute(); $rw = $stmt->fetchObject(); return $rw->DIAS; }
Mesmo assim não me retorna nada
Agora seu eu utilizar assim
public function retornaDiasData($data) { $sql = "SELECT (DATEPART(DW,DATEADD(day, 2, getdate()))) AS DIAS"; $stmt = $this->db->prepare($sql); $stmt->bindParam(":data", $data, PDO::PARAM_STR); $stmt->execute(); $rw = $stmt->fetchObject(); return $rw->DIAS; }
Desta forma funciona. Veja que passei a sentença sem variável. Gostaria de entender porque isto acontece, porque não aceita variáveis nas sentenças com PDO. Se utilizar um mssql_query ao invés de PDO a variável funciona. Pode ser algo relacionado a segurança, mas tem uma boa prática para funcionar?
26/11/2015
William
http://www.devwilliam.com.br/php/curso-php-com-pdo-videos
Clique aqui para fazer login e interagir na Comunidade :)