Preciso fazer UPDATE em um campo (office) de uma tabela (investidor) do banco de dados (b2c) no meu site.
Contudo, esse UPDATE dependerá de uma consulta SELECT que é feita em outro banco de dados de outro site (ambos os sites pertencem à mesma empresa). Os dois bancos são em MySQL.
Abaixo o código que eu implementei:
$emailInv = $this->email; $sqlNuevo = "SELECT DISTINCT uh.TIPO_INVESTIDOR FROM ipi_tst.uh JOIN ipi_tst.investidor i ON i.ID = uh.ID_INVESTIDOR JOIN ipi_tst.usuario u ON u.ID = i.ID_USUARIO WHERE u.EMAIL = '$emailInv' AND u.ID <> 0 ORDER BY FIELD(TIPO_INVESTIDOR,'P','C','O','A')"; $rNew = System::element('db2')->query($sqlNuevo); if ($rNew[0]['TIPO_INVESTIDOR'] == 'O'){ $sqlUpd = "UPDATE b2c.investidor SET office = '1' WHERE email = '$emailInv' AND ID <> 0"; $res = System::element('db')->query($sqlUpd); } else if ($rNew[0]['TIPO_INVESTIDOR'] == 'A'){ $sqlUpd = "UPDATE b2c.investidor SET office = '2' WHERE email = '$emailInv' AND ID <> 0"; $res = System::element('db')->query($sqlUpd); } else { $sqlUpd = "UPDATE b2c.investidor SET office = '0' WHERE email = '$emailInv' AND ID <> 0"; $res = System::element('db')->query($sqlUpd); }
Por enquanto, ele só consegue fazer update colocando valores Zero. Há casos em que dentro dessa tabela uh não tenha valores P ou C (office = 0). Pode ser que eu tenha apenas O ou apenas A, e aí precisaria fazer update colocando 1 ou 2, respectivamente.
O que pode estar errado? Não tenho certeza se ele conseguiu fazer a conexão com meu banco db2 (do outro site). O arquivo config.INI teve a adição dos dados database_portal. Eis o código desse arquivo (omiti algumas informações aqui por segurança e coloquei abaixo entre << e >> ):
[application] versao = 1.0 titulo = B2C default_pagina = index default_metodo = index default_erro = erro default_erro_403 = erro403 default_erro_404 = erro404 default_login = login debug = 0 idioma = pt-BR moeda = RS identificador = ipi_ [mensagem] fundo = #000000 cor = #ffffff delay = 2000 posicao = bottom [dir] raiz[localhost] = http://localhost/ raiz[<<MEU IP DO SITE>>] = <<MEU IP DO SITE>> raiz[<<MEU LINK DO SITE>>] = <<MEU LINK DO SITE>> [database] db_alias = db db_type = mysql db_name = b2c db_hostname = localhost db_username = <<LOGIN DO db>> db_password = <<SENHA DO db>> db_port = 3306 [database_portal] db_alias = db2 db_type = mysql db_name = ipi_tst db_hostname = <<IP DO OUTRO SITE>> db_username = ipi_tst db_password = ipi_tst db_port = 3306 [cookie] duracao = 10800 caminho = / dominio = [mail] mailer_type = system admin_email = admin@framework.com admin_name = "Admin - Framework" smtp_server = mail.framework.com smtp_port = 25; x_mailer = "xxxxx" smtp_server = "mail.framework.com" smtp_port = 25 smtp_timeout = 30 [logging] nivel_log = 200 handler_log = file arquivo_log = erros.log [document_root] root = <<DIRETÓRIO RAIZ>> rootDSV = <<OUTRO DIRETÓRIO>> [version] atual_version = 1.5
E tem também o libBanco.php, incluso dentro do diretório trunk/libs/libBanco. Nesse arquivo só inclui a função SWITCH relacionada com o banco do outro site (db2 ou database_portal):
<?php $dir = '../libs/libBanco'; require_once("$dir/banco.php"); require_once("$dir/modeloBanco.php"); switch(Config::retorna('database', 'db_type')) { case 'oracle': require_once('oracle.php'); $db = new Oracle(); break; case 'mysql': require_once('mysql.php'); $db = new Mysql(); break; default: $db = null; break; } switch(Config::retorna('database_portal', 'db_type')) { case 'oracle': require_once('oracle.php'); $db2 = new Oracle(); break; case 'mysql': require_once('mysql.php'); $db2 = new Mysql(); break; default: $db2 = null; break; } System::define(Config::retorna('database', 'db_alias'), $db); System::define(Config::retorna('database_portal', 'db_alias'), $db2); ?>
Não sei se faltou alguma configuração nesse caso também. Talvez em algum outro arquivo. O que pode ser? Espero que seja só algum erro no sqlNuevo do código que implementei inicialmente.