I have a class that does the insertion of records into a table. The data that comes from the request I transform into an array and then construct a SQL statement similar to this:
INSERT INTO web_messages (pk_web_messages, fk_type_messages, name_user, email_user, title_msg, phone_user, cel_user, end_user, compl_user, city_user, state_user, cep_user, msg_user) VALUES (:pk_web_messages, :fk_type_messages, :name_user, :email_user, :title_msg, :phone_user, :cel_user, :end_user, :compl_user, :city_user, :state_user, :cep_user, :msg_user)
The parameters step by the function bindParam and when I do the execute executes a lot of crazy data in the table: see the code as I am:
foreach ($this->Dados as $field => $defs): // Constrói os parâmetros do comando INSERT
if (is_array($defs)): // Se $defs é um array então possui valor e tipo do dado
$value = ((($defs['type'] > FDT_STR) && (isset($defs['value']))) ? $defs['value'] : null); // pega o valor ou um tipo de arquivo a ser armazenado
$type = (($value) ? $FIELD_PDO_TYPE[$defs['type']] : PDO::PARAM_NULL); // Se o valor for nulo retorna PDO::PARAM_NULL senão converte para o tipo correto
$this->Create->bindParam(":{$field}", $value, $type); // Cria o parâmetro no PDO com o nome do campo, valor e tipo
else:
$this->Create->bindParam(":{$field}", $defs); // Cria o parâmetro PDO com o Default (PDO::PARAM_STR)
endif;
endforeach;
the data array contains:
[pk_web_messages] => 0
[fk_type_messages] => 3
[name_user] => Nome do usuario
[email_user] => [email protected]
[title_msg] => Mensagem nova com testes da classe
[phone_user] => (11) 3333-4444
[cel_user] => (11) 2222-3333
[end_user] => Rua do usuário, 1111
[compl_user] => apto 10
[city_user] => Cidade do usuário
[state_user] => SP
[cep_user] => 00.000-000
[msg_user] =>
(
[value] => Texto a ser inserido no campo Blob.
[type] => 6
)
See what type in the msg_user field means the mapping to insert objects into the BLOB field which becomes the PDO :: PARAM_LOB constant. If I do the debug of the php variables everything works correctly, however when doing the PDOStatement :: execute () it writes a lot of nonsense in the database, or it gives conversion error of the variables, or error that truncates the data to the field.... What can this be?