Problem checking a query in PHP

Asked

Viewed 30 times

-1

I have a if which should verify that JOIN has a row with 3 columns of records in order to prevent a new registration of the same product and supplier, but does not verify.

I gave one var_dump() in the $linha_qnt and returns int(0)

The error is the line $linha_qnt = $seleciona_qnt->columnCount();

    $cd_fornecedor = intval($_POST['cd_fornecedor']);
    $cd_produto = intval($_POST['cd_produto']);

    $procurar_fornecedor = "SELECT nome FROM fornecedor WHERE cd_fornecedor = :cd_fornecedor LIMIT 1";
    $busca_fornercedor = $conexao->prepare($procurar_fornecedor);
    $busca_fornercedor->bindValue(':cd_fornecedor', $cd_fornecedor);
    $busca_fornercedor->execute();
    $linha1 = $busca_fornercedor->fetch();
    $nome_fornecedor = $linha1['nome'];

    $procurar_produto = "SELECT nome, codigo_barra FROM produto WHERE cd_produto = :cd_produto LIMIT 1";
    $busca_produto = $conexao->prepare($procurar_produto);
    $busca_produto->bindValue(':cd_produto', $cd_produto);
    $busca_produto->execute();
    $linha2 = $busca_produto->fetch();
    $nome_produto = $linha2['nome'];
    $codigo_produto = $linha2['codigo_barra'];

    $qnt_registro = "SELECT COUNT(fornecedor.nome) AS forn_nome, 
    COUNT(produto.nome) AS prod_nome, COUNT(produto.codigo_barra) AS prod_cod FROM compra_fornecedor
    INNER JOIN fornecedor ON (fornecedor.cd_fornecedor = compra_fornecedor.cd_fornecedor)
    INNER JOIN produto ON (produto.cd_produto = compra_fornecedor.cd_produto)
    WHERE fornecedor.nome = {$nome_fornecedor} AND produto.nome = {$nome_produto} 
    AND produto.codigo_barra = {$codigo_produto} ";
    $seleciona_qnt = $conexao->prepare($qnt_registro);
    $seleciona_qnt->execute();
    $linha_qnt = $seleciona_qnt->columnCount(); // ERRO

    if ($linha_qnt != 0) {
        echo "O fornecedor {$nome_fornecedor} já possui uma compra 
        cadastrada de {$nome_produto} com código de barra {$codigo_produto}.";
        echo '<p><a href="../form_crud/form_insert_compra.php" title="Refazer operação"><button>Refazer operação</button></a></p>';
        die;
    } 
  • qtn_registro returns a query with 3 columns: forn_nome, prod_nome, prod_cod. Each of them has one count()

  • What is the result of PDO::errorInfo() before and after $linha_qnt = $seleciona_qnt->columnCount();

1 answer

0

You can return the results with the fetchObject() or fetchAll() and thus validate:

$linha_qnt = $seleciona_qnt->fetchObject();
if ($linha_qnt->forn_nome != 0) {
    echo "O fornecedor {$nome_fornecedor} já possui uma compra cadastrada de {$nome_produto} com código de barra {$codigo_produto}.";
    echo '<p><a href="../form_crud/form_insert_compra.php" title="Refazer operação"><button>Refazer operação</button></a></p>';
    die;
}

Just check if you need to return these three columns with counter (forn_nome, prod_nome, prod_cod). The columnCount() returns the number of columns of the result, guess it is not what you need.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.