Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Paulo Novais

[Resolvido] PDO - INSERT com campo binário (LOB)

Recommended Posts

Boa noite!

 

Tenho uma tabela assim:

+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| cod_escola       | int(11)      | NO   | PRI | NULL    | auto_increment |
| nom_escola       | varchar(200) | NO   |     | NULL    |                |
| nom_razao_social | varchar(200) | YES  |     | NULL    |                |
| num_cnpj         | varchar(15)  | YES  |     | NULL    |                |
| des_endereco     | varchar(200) | YES  |     | NULL    |                |
| des_cidade       | varchar(100) | YES  |     | NULL    |                |
| des_bairro       | varchar(100) | YES  |     | NULL    |                |
| sig_uf           | char(2)      | YES  |     | NULL    |                |
| cep_escola       | varchar(10)  | YES  |     | NULL    |                |
| txt_observacao   | text         | YES  |     | NULL    |                |
| med_logo         | longblob     | YES  |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+

 

Estou tentando fazer o insert assim:

 

static function inserir(Model $escola) {

       try {

          $conn = Conexao::obterConexao();

   $sql = $conn->prepare("insert into lcd_escola (nom_escola,    nom_razao_social,
                                                         num_cnpj,      des_endereco,
                                                         des_cidade,    des_bairro,
                                                         sig_uf,        cep_escola,
                                                         txt_observacao,med_logo)
                                                  values (?,?,?,?,?,?,?,?,?,?)");
           $sql->bindParam(1,$escola->get("nom_escola"));
           $sql->bindParam(2,$escola->get("nom_razao_social"));
           $sql->bindParam(3,$escola->get("num_cnpj"));
           $sql->bindParam(4,$escola->get("des_endereco"));
           $sql->bindParam(5,$escola->get("des_cidade"));
           $sql->bindParam(6,$escola->get("des_bairro"));
           $sql->bindParam(7,$escola->get("sig_uf"));
           $sql->bindParam(8,$escola->get("cep_escola"));
           $sql->bindParam(9,$escola->get("txt_observacao"));
           $sql->bindParam(10,$escola->get("med_logo"),PDO::PARAM_LOB);

           $sql->execute();

           $cod_escola = $conn->lastInsertId();

    mysql_close($conn);

    return $cod_escola;
       } catch (Exception $e) {
       	$conn->rollback();
       	mysql_close($conn);
       	$e->getMessage();
       }
   }

 

Já substituí o bindParam pelo array e passei-o ao execute(), mas mesmo assim não funcionou. O que está errado? Obrigado.

 

Esclarecendo, o erro é que o $sql->execute() retorna FALSE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey,

 

Não deu nenhuma mensagem de erro, mas dá para notar pelos prints que coloquei para debugar que ele parou no $sql->execute(); Este método que retornava FALSE agora não executa.

 

Mande exibir as mensagens de erro .. coloque isto acima do seu prepare

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se está parando, tem algum motivo .. o engraçado é que, quando dá problema no execute, normalmente tem problema de sintaxe sql, ou problema quando a query chega no banco .. era pra haver alguma mensagem de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem, você pode imprimir a propriedade queryString, ou até mesmo utilizar o debugDumpParams, cara dá uma executada aí

echo $sql->errorInfo();

 

Não é possível não estar retornando nenhuma mensagem de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo so por curiosidade em vez de passar os dados do get seta uma sql estatica e veja se ela esta sendo inserida no banco de dados.

caso não seja inserida passe a o objeto da conexao atraves de um metodo.

 

agora se for inserida no banco ai nao posso te ajudar pois nao sou acostumado a trabalhar com pdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey,

 

Retornou um array vazio.. estamos chegando ao problema... sei que é algum díptero (mosca), mas ainda não sei a espécie :grin:

 

Tem, você pode imprimir a propriedade queryString, ou até mesmo utilizar o debugDumpParams, cara dá uma executada aí

echo $sql->errorInfo();

 

Não é possível não estar retornando nenhuma mensagem de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Josué,

 

A dica foi boa "manter as coisas estupidamente simples" (KISS) e realmente me mostrou um problema de permissão do usuário... realmente funcionou. Obrigado.

 

amigo so por curiosidade em vez de passar os dados do get seta uma sql estatica e veja se ela esta sendo inserida no banco de dados.

caso não seja inserida passe a o objeto da conexao atraves de um metodo.

 

agora se for inserida no banco ai nao posso te ajudar pois nao sou acostumado a trabalhar com pdo.

 

Andrey,

 

Por curiosidade, antes de mudar para o bindValue, optei por usar os QUESTION MARK puros, pois me intrigava não ter funcionado, qual a razão de ter que usar bindParam ou bindValue? Para minha surpresa, funcionou!!! Eis o código:

 

static function inserir(Model $escola) {

       try {

	    $conn = Conexao::obterConexao();
	    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	    $sql = $conn->prepare("insert into lcd_escola (nom_escola,    nom_razao_social,
                                                          num_cnpj,      des_endereco,
                                                          des_cidade,    des_bairro,
                                                          sig_uf,        cep_escola,
                                                          txt_observacao,med_logo)
                                                  values (?,?,?,?,?,?,?,?,?,?)");

	    $sql->execute(array($escola->get("nom_escola")    ,$escola->get("nom_razao_social"),
                               $escola->get("num_cnpj")      ,$escola->get("des_endereco"),
                               $escola->get("des_cidade")    ,$escola->get("des_bairro"),
                               $escola->get("sig_uf")        ,$escola->get("cep_escola"),
                               $escola->get("txt_observacao"),$escola->get("med_logo")));

           $cod_escola = $conn->lastInsertId();
           //Escola PENDENTE
           self::incluirSituacao($cod_escola,'P');

        $conn = null;

        return $cod_escola;

       } catch (Exception $e) {

       	$conn = null;
       	print $e->getMessage();
       }
   }

 

 

HAhhaa, acho que já sei o problema, tente utilizar 'bindValue', ao invés de bindParam ..

 

Obrigado a todos pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.