The existing answers correctly address the problem, but I think when we talk about exceeding the limits of a row in the database, we’re 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 will cause 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 storing all the data in the "tb_worker detail" table:
$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:
Table tb_details_worker
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 are kept only the data related to the worker that are distinct, that is, they relate to each other but do not combine with other existing.
Table tb_details_worker_medica
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 concerning the worker’s doctor are stored.
The relation between tables is created by the field trabalhador_id
.
Note:
The indicated scheme is repeated for each group of data you have, that is, you would have a table for the data of Soldador
, of Redes
, etc....
This way you do not face problems with the line limits in your table and you get the information "tidy".
Data Insertion
Working with more than one table to store the data, you have to enter the data in another way, follow an example:
Insert main table data
$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 secondary tables
$sql = "
INSERT INTO tb_detalhe_trabalhador_medica (id, trabalhador_id, `validade`, `anexo`)
VALUES ($idTrabalhador, $MedicaValidade3, $MedicaAnexo3)";
mysql_query($sql);
Checks
For the insertion to be controlled, you can check the state of things as the mysql_query()
is being 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";
}
Right, and now I need to have the comic book working correctly: How to fix this problem for now?
– ChrisAdler
The most critical point, besides the context focus, is that you need to normalize the database.. See the @Zuul response and the others as well. And on the focus of your question, the Mysql error message itself already suggests fixes...
– Daniel Omine