The existing responses correctly address the problem, but I think that when we talk about exceeding the boundaries of a row in the database, we are dealing with the design of the table itself.
The error basically indicates that the amount of data is too high to fit on a line with your current configuration. Instead of changing all the configuration that besides work will generate performance problems in the future, I suggest redesigning the table (s) to divide the information in a more efficient way.
Example
Your current structure tells me that you are saving all the data in the table "tb_details_worker":
$sqlupdate3 = "
Update tb_detalhe_trabalhador SET
Nome3 = '$Nome3',
Funcao3 = '$Funcao3',
MedicaValidade3 = '$MedicaValidade3',
MedicaAnexo3 = '$MedicaAnexo3',
EPISValidade3 = '$EPISValidade3',
ProjectistaNumero3 = '$ProjectistaNumero3',
ProjectistaValidade3 = '$ProjectistaValidade3',
GasNumero3 = '$GasNumero3',
GasValidade3 = '$GasValidade3',
RedesNumero3 = '$RedesNumero3',
RedesValidade3 = '$RedesValidade3',
SoldadorNumero3 = '$SoldadorNumero3',
SoldadorValidade3 = '$SoldadorValidade3',
MecanicoNumero3 = '$MecanicoNumero3',
MecanicoValidade3 = '$MecanicoValidade3',
ClasSoldadorNumero3 = '$ClasSoldadorNumero3',
ClasSoldadorValidade3 = '$ClasSoldadorValidade3'
where id=$id ";
Data can be organized (grouped) into separate tables, thus contributing to a reduction of data per line:
Tb_worker_table
CREATE TABLE IF NOT EXISTS 'tb_detalhe_trabalhador' (
'trabalhador_id' int(13) NOT NULL AUTO_INCREMENT COMMENT 'ID do trabalhador',
'nome' varchar(255) NOT NULL COMMENT 'Nome do trabalhador',
'funcao' varchar(255) NOT NULL COMMENT 'Função do trabalhador',
PRIMARY KEY ('trabalhador_id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Detalhes dos trabalhadores' AUTO_INCREMENT=1 ;
In this table, only data related to the worker are stored, that is, they relate to each other but do not combine with existing ones.
Table tb_detail_medical_worker
CREATE TABLE IF NOT EXISTS 'tb_detalhe_trabalhador_medica' (
'id' int(13) NOT NULL AUTO_INCREMENT COMMENT 'Id interno',
'trabalhador_id' int(13) NOT NULL COMMENT 'O "trabalhador_id" da tabela "tb_detalhe_trabalhador"',
'validade' date NOT NULL DEFAULT '0000-00-00' COMMENT 'Data de validade',
'anexo' longblob NOT NULL COMMENT 'Documento',
PRIMARY KEY ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Detalhes do trabalhador para médica' AUTO_INCREMENT=1 ;
In this table only the data relating to the worker's medical record are stored.
The relationship between tables is created by the trabalhador_id
field.
Note:
The schema indicated is repeated for each group of data you have, that is, you would have a table for the data of Soldador
, Redes
, etc ...
In this way you do not have problems with the line limits in your table and you have the most "tidy" information.
Data Insertion
Working with more than one table to save the data, you have to insert the data in another way, here is an example:
Insert the data in the main table
$sql = "
INSERT INTO tb_detalhe_trabalhador (nome, funcao)
VALUES ($Nome3, $Funcao3)";
mysql_query($sql);
$idTrabalhador = mysql_insert_id(); /* recolher ID que acabou de ser criado para
utilizar ao inserir nas tabelas secundárias
e assim criar a relação entre elas */
Insert data into child tables
$sql = "
INSERT INTO tb_detalhe_trabalhador_medica (id, trabalhador_id, 'validade', 'anexo')
VALUES ($idTrabalhador, $MedicaValidade3, $MedicaAnexo3)";
mysql_query($sql);
Checks
For the insert to be controlled, you can check the status of things as mysql_query()
is executed:
/* Preparar Dados
*/
$sqlTrabalhador = "
INSERT INTO tb_detalhe_trabalhador (nome, funcao)
VALUES ($Nome3, $Funcao3)";
/* Inserir
*/
if (mysql_query($sqlTrabalhador)) {
// recolhe ID do trabalhador
$idTrabalhador = mysql_insert_id();
/* Preparar Dados
*/
$sqlTrabalhadorMedica = "
INSERT INTO tb_detalhe_trabalhador_medica (id, trabalhador_id, 'validade', 'anexo')
VALUES ($idTrabalhador, $MedicaValidade3, $MedicaAnexo3)";
if (mysql_query($sqlTrabalhadorMedica)) {
// restantes inserções para as outras tabelas continuam aqui...
}
else {
echo "Ocorreu um erro ao inserir os dados para Médica";
}
}
else {
echo "Ocorreu um erro ao inserir os detalhes do trabalhador";
}