Foros del Web » Programando para Internet » PHP »

Problema: Select con acentos a base de Oracle

Estas en el tema de Problema: Select con acentos a base de Oracle en el foro de PHP en Foros del Web. Buen día. Les comento mi caso, tengo una tabla de usuarios donde guardo sus nombres ( nada nuevo ), tengo que recalcar que los nombres ...
  #1 (permalink)  
Antiguo 14/10/2010, 14:54
Avatar de Chiefwesker  
Fecha de Ingreso: octubre-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Problema: Select con acentos a base de Oracle

Buen día.

Les comento mi caso, tengo una tabla de usuarios donde guardo sus nombres ( nada nuevo ), tengo que recalcar que los nombres los guardo en la base de datos de Oracle con acentos cuando esto aplica.

El problema se presenta cuando hago un like ,con el nombre a buscar que tiene acento. Les dejo un ejemplo para dejar mas clara la idea:

Código PHP:

//Aqui se recibe el nombre que tendria acento, por ejemplo 'César'
$search $_POST['bookSearch'];

$sql "select * from USERS where USER_NAME like '%".$search."%'"
Al correr el script de PHP no me arroja ningún resultado, lo extraño es que cuando meto la consulta en el TOAD la consulta si surte efecto.

¿Alguien podría ayudarme con este problema?, espero haberme hecho entender
  #2 (permalink)  
Antiguo 14/10/2010, 21:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Problema: Select con acentos a base de Oracle

Verifica la variable de search a ver si tiene escrito correctamente lo que buscas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 15/10/2010, 07:30
Avatar de Chiefwesker  
Fecha de Ingreso: octubre-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Exclamación Respuesta: Problema: Select con acentos a base de Oracle

Hola abimaelrc, gracias por contestar.

Bueno la verdad es que si verifico que lo que escribo se recibe de forma correcta pero ese no es el problema, aun si pongo el nombre directamente en la consulta en PHP no me da resultado, pero si la pongo en el TOAD si lo hace.

Código PHP:

$sql 
"SELECT * FROM USERS WHERE USER_NAME LIKE '%César%'"
Alguna idea??
  #4 (permalink)  
Antiguo 15/10/2010, 07:48
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Problema: Select con acentos a base de Oracle

¿Como haces para conectarte a la base de datos?
Porque ahí solo estas creando la estructura y almacenandola en una variable.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 15/10/2010, 08:16
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: Problema: Select con acentos a base de Oracle

Saludos

Has probado colocando mysql_error haber si te devuelve un error al realizar la sentencia?
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #6 (permalink)  
Antiguo 15/10/2010, 08:19
Avatar de Chiefwesker  
Fecha de Ingreso: octubre-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Exclamación Respuesta: Problema: Select con acentos a base de Oracle

Lo siento por no incluirla, te pongo la estructura completa.

Código PHP:

function connection()
{
    
$connect oci_connect('UNO''USER''(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mi-hostcom)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=mi-host.com)(PORT=1521))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=base)))');
    if (!
$connect)
    {
        
$e oci_error();
        
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    else
        
define('connect',$connect);
}
connection();


$search $_POST['Search'];
$sql "select * from USERS where USER_NAME like '%".$search."%' ";

$Total oci_parse(connect,$sql);
oci_execute($Total);
$NroRegistros=OCIFetchStatement($Total,$mm);
echo 
'<br />numero de registros'.$NroRegistros;

/*Pongo la consulta directa como observación de que asi tampoco me funciona solo en el TOAD
$sql = "select * from USERS where USER_NAME like 'César' ";*/ 
Espero con esto tengas un poc mas clara la situación, gracias por ayudar.
  #7 (permalink)  
Antiguo 15/10/2010, 08:25
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: Problema: Select con acentos a base de Oracle

Saludos

1. Que pena mysql_error no sirve para oracle

2. Esto es una sugerencia por que no utilizas adodb?

3. Podrias probar haciendo lo siguiente:

Código PHP:

$Total 
= @oci_parse(connect,$sql); 
if (!
$Total ) {
  
$e oci_error($connect);  
  echo 
htmlentities($e['message']);

__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #8 (permalink)  
Antiguo 15/10/2010, 08:27
Avatar de Chiefwesker  
Fecha de Ingreso: octubre-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Sonrisa Respuesta: Problema: Select con acentos a base de Oracle

Cita:
Iniciado por Nano_ Ver Mensaje
Saludos

Has probado colocando mysql_error haber si te devuelve un error al realizar la sentencia?
No puedo usar mysql_error por que la base es en Oracle. Pero metere en mi codigo el oci_error para ver si me arroja algo. Gracias
  #9 (permalink)  
Antiguo 15/10/2010, 08:40
Avatar de Chiefwesker  
Fecha de Ingreso: octubre-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Exclamación Respuesta: Problema: Select con acentos a base de Oracle

Cita:
Iniciado por Nano_ Ver Mensaje
Saludos

1. Que pena mysql_error no sirve para oracle

2. Esto es una sugerencia por que no utilizas adodb?

3. Podrias probar haciendo lo siguiente:

Código PHP:

$Total 
= @oci_parse(connect,$sql); 
if (!
$Total ) {
  
$e oci_error($connect);  
  echo 
htmlentities($e['message']);


Jejeje si es una pena jeje, bueno ya agregue el oci_error y no me marca ningún error, de hecho funciona bien la consulta. Mi variable $NroRegistros me imprime un 0, como si no hubiera un registro con el nombre 'César' lo cual es mentira .

El problema siguen siendo los acentos, como tengo guardados los nombres con acentos en la base de datos intente cambiar mi consulta por algo asi.

Código PHP:

$sql 
"select * from USERS where translate(USER_NAME,'é','e') like '%Cesar%'";
//Con la función [B]translate[/B] cambio en mi base la letra e con tilde por la e normal. 
Aún haciendo esto no funciona, pero igual que con la consulta sencilla, en el TOAD funciona perfecto.
  #10 (permalink)  
Antiguo 15/10/2010, 09:03
Avatar de Chiefwesker  
Fecha de Ingreso: octubre-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Problema: Select con acentos a base de Oracle

Por fin !!!!!

Bueno ya encontre la solución, al parecer solo tenia que indicar el charset UTF8 al momento de hacer mi conexión. Les dejo el ejemplo por si alguien se topa con el mismo problema o algo similar.

Código PHP:

// Este es mi ejemplo de conexion a mi base y le agregue al final el charset [B]'UTF8'[/B]
$connect oci_connect('UNO''USER''(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mi-hostcom)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=mi-host.com)(PORT=1521))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=base)))','UTF8'); 
Gracias por la ayuda abimaelrc ,Nano_ y por dedicarme su valioso tiempo a mi caso.

Nos estamos viendo, Saludos.

Etiquetas: acentos, oracle, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:32.