Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou com um problema no meu código php, mas como sou iniciante não sei como proceder. Enfim vamos lá, estou criando uma script para rodar como cron em um servidor com cpanel, este script faz uma atualização no banco alterando o valor de um registro de 0 para 1 com base em outra data base.
Um exemplo:
Banco de dados lime_survey no campo 421193X1X1 existe uma matrícula de número 1990 o script verifica esta matricula e altera em outro banco de dados chamado funcionarios no registro da matricula dele vai ter o campo demitido, mudando de 0 para 1, porém se existir mais de uma matricula a ser alterada ele altera apenas a primeira que estiver no registro do banco do lime_survey.
Segue abaixo um código que eu tentei fazer.
$db1 = mysql_connect($dbhost, $dbuser, $dbpass);
$rv = mysql_select_db($dbname1, $db1);
$db2 = mysql_connect($dbhost, $dbuser, $dbpass, TRUE);
$rv = mysql_select_db($dbname2, $db2);
/ FIM CONEXÃO /
$busca1 = mysql_query('select * from lime_survey_421193', $db2) or die(mysql_error());
while ($row1 = mysql_fetch_array($busca1)) {
$matricula = $row1['421193X1X1'];
}
$pegatemp = "select * from pci_funcionarios WHERE matricula <> '$matricula'";
$sqlcheckn = mysql_query($pegatemp, $db1) or die("Ops! Erro ao conectar ao banco de dados.");
while ($row = mysql_fetch_array($sqlcheckn)) {
$pegadados = $row['demitido'];
if ($pegadados == 0) {
$altera = mysql_query("UPDATE pci_funcionarios SET demitido = '1' WHERE matricula = '$matricula'", $db1) or die (mysql_error());
}
}>
Qual é exatamente o problema com seu código? Dá algum erro? Qual?
PS: funções mysql_* estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql
Então ele não chega a dar um erro ele apenas não faz com todas as matriculas presentes.
Exemplo:
Se no banco lime_survey estiver algumas matriculas como:
1990
1991
1992
1993
O script pega somente a 1990 e altera, e não faz com as outras.
Ele devia verificar a 1991 e alterar o status dela no outro banco de 0 para 1 também e assim por diante.
Seu problema está aqui:
while ($row1 = mysql_fetch_array($busca1)) {
$matricula = $row1['421193X1X1'];
}
$pegatemp = "select * from pci_funcionarios WHERE matricula <> '$matricula'";
$sqlcheckn = mysql_query($pegatemp, $db1) or die("Ops! Erro ao conectar ao banco de dados.");
$matricula fica com o último valor buscado no loop. Você tem que tornar $matricula um aray, desta forma:
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$matricula[] = $row1['421193X1X1'];
}
Assim $matricula será um array com todos os IDs.
Depois bata trocar a segunda consulta para o seguinte
$pegatemp = "select * from pci_funcionarios WHERE matricula NOT IN(" . implode( ',', $matricula . ")";
Links úteis:
Operador IN da SQL: http://www.w3schools.com/sql/sql_in.asp
Função implode do PHP: http://php.net/implode
>
Seu problema está aqui:
while ($row1 = mysql_fetch_array($busca1)) {
$matricula = $row1['421193X1X1'];
}
$pegatemp = "select * from pci_funcionarios WHERE matricula <> '$matricula'";
$sqlcheckn = mysql_query($pegatemp, $db1) or die("Ops! Erro ao conectar ao banco de dados.");
$matricula fica com o último valor buscado no loop. Você tem que tornar $matricula um aray, desta forma:
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$matricula[] = $row1['421193X1X1'];
}
Assim $matricula será um array com todos os IDs.
Depois bata trocar a segunda consulta para o seguinte
$pegatemp = "select * from pci_funcionarios WHERE matricula NOT IN(" . implode( ',', $matricula . ")";
Links úteis:
Operador IN da SQL: http://www.w3schools.com/sql/sql_in.asp
Função implode do PHP: http://php.net/implode
$matricula = [];
while ($row1 = mysql_fetch_array($busca1)) {
$matricula[] = $row1['421193X1X1'];
}
$pegatemp = "select * from pci_funcionarios WHERE matricula NOT IN(" . implode( ',', $matricula . ")";
Deu um erro neste código...
PHP Parse error: syntax error, unexpected ';' on line 48
faltou fechar os parênteses da função implode.
$pegatemp = "select * from pci_funcionarios WHERE matricula NOT IN(" . implode( ',', $matricula ) . ")";
>
faltou fechar os parênteses da função implode.
$pegatemp = "select * from pci_funcionarios WHERE matricula NOT IN(" . implode( ',', $matricula ) . ")";
Funcionou, obrigado você é o cara Beraldo :joia:
Qual é exatamente o problema com seu código? Dá algum erro? Qual?
PS: funções mysql_* estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql