Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
boa tarde, estou criando um relatório e buscando via PDO os dados no banco, mas no momento cheguei a um empasse...
no mssql isso era fácil de fazer. mas com PDO não estou conseguindo,
ao final do scrypt estou deixando em aberto para pesquisar por campos... podem ser preenchidos ou não.
apos o código vem a verificação das variáveis para concatenação no WHERE
if(!empty($_POST['cod_recurso'])){
$pdo->prepare("and AP.U_RESCODE = '$cod_resurso'");
}
mas isso não esta certo! qual seria a maneira correta de se concatenas no sql principal a instrução?Perfeito, não havia pensado nisso!
não entendi o trecho do código, poderia me explicar?
$pstmt->bindParam(n, $valor); // Tal que "n" é a posição do valor na query
o bindParam eu uso quando estou usando PreparedStatements do PDO, ele trava os valores antes de serem atribuídos na consulta.
o n é a posição do valor na consulta, digamos que na consulta eu tenha 3 valores :
>
Citar
*"WHERE Coluna1 = ? AND Coluna2 = ? AND Coluna3 = ?"*
Eu teria os seguintes bindParams:
<?php
$pstmt->bindParam(1, $valorColuna1); // Referente o valor da primeira interrogação
$pstmt->bindParam(2, $valorColuna2); // Referente o valor da segunda interrogação
$pstmt->bindParam(3, $valorColuna3); // Referente o valor da terceira interrogação
No seu caso, imagino que ficaria algo assim:
<?php
$sql = "SELECT... WHERE CRITERIO1 = ? ";
if(!empty($_POST['cod_recurso'])){
$sql .= "AND AP.U_RESCODE = ?"; // Poderia colocar o valor direto, porém torna seu código vulnerável a SQL Injection.
}
$pstmt = $pdo->prepare($sql);
$pstmt->bindParam(1, $valorCRITERIO1);
if(!empty($_POST['cod_recurso']))
$pstmt->bindParam(2, $valorU_RESCODE);
$pstmt->fetchAll();>
15 horas atrás, Edgard Hufelande disse:
o bindParam eu uso quando estou usando PreparedStatements do PDO, ele trava os valores antes de serem atribuídos na consulta.
o n é a posição do valor na consulta, digamos que na consulta eu tenha 3 valores :
Eu teria os seguintes bindParams:
<?php
$pstmt->bindParam(1, $valorColuna1); // Referente o valor da primeira interrogação
$pstmt->bindParam(2, $valorColuna2); // Referente o valor da segunda interrogação
$pstmt->bindParam(3, $valorColuna3); // Referente o valor da terceira interrogação
No seu caso, imagino eu que ficaria algo assim:
<?php
$sql = "SELECT... WHERE CRITERIO1 = ? ";
if(!empty($_POST['cod_recurso'])){
$sql .= "AND AP.U_RESCODE = ?"; // Poderia colocar o valor direto, porém torna seu código vulnerável a SQL Injection.
}
$pstmt = $pdo->prepare($sql);
$pstmt->bindParam(1, $valorCRITERIO1);
if(!empty($_POST['cod_recurso']))
$pstmt->bindParam(2, $valorU_RESCODE);
$pstmt->fetchAll();
Ficou perfeito! Muito obrigado pela ajuda....Disponha!
Crie a string sql fora, concatene o que for necessário e só depois jogue no prepare.
$pstmt->bindParam(n, $valor); // Tal que "n" é a posição do valor na query$pstmt->fetchAll();