2011-04-10 11 views
7

Tengo lo que creo que es una llamada de consulta normal en CakePHP: funciona para todos los resultados, pero cuando un campo tiene un carácter especial, el el campo volverá vacío. No se rompe, y todavía me da el resto de los campos, es solo un campo que está vacío.CakePHP - la consulta devuelve un campo vacío si tiene un carácter especial

Ejemplo:

$this->paginate = array(
'conditions' => array(
    'Item.name != ' => '', 
), 
); 
$data = $this->paginate('Item'); 

Esto devolverá todos los artículos en mi mesa (incluyendo la que pensé que tenía un campo de nombre vacío) - pero cuando intento hacer eco el nombre de la página, funciona para cada elemento, excepto el que tiene un carácter especial (é). Lo cambié a una "e" normal y se muestra bien.

¿Cómo puedo devolver resultados incluso si tienen un carácter especial en su nombre? ¡Gracias por adelantado!

+2

¿Cuál es la codificación de la tabla? Además, ¿qué ocurre cuando ejecuta la consulta manualmente? ¿Aparece? Y compruebe si el campo está realmente poblado ejecutando 'var_dump()' en él – JohnP

+0

@JohnP - No estoy seguro acerca de la codificación, pero cuando ejecuto la consulta manualmente (en el software o a través de php regular), aparece esta bien – Dave

+0

@Dave deberás confirmar si Cake está realizando algún tipo de filtrado en los datos. Ejecute var_dump() o debug() y vea si los datos están realmente presentes en la matriz y simplemente no se muestran.También es posible que desee establecer la intercalación del DB en utf_8, así como el tipo de contenido en el HTML – JohnP

Respuesta

8

Compruebe para asegurarse de que su base de datos utiliza la codificación correcta (UTF-8, a ser posible) y ha configurado la torta de usar esta misma codificación, así como en config/database.php:

class DATABASE_CONFIG { 
    public $default = array(
     ... 
     'encoding' => 'utf8' 
    ); 
} 

Si tiene alguna codificación desajuste, su aplicación probablemente ya haya almacenado basura en la base de datos, por lo tanto, asegúrese de probar con los datos correctos y/o una nueva base de datos.

+0

¿Me permitirá UTF-8 mantener caracteres especiales como letras en diéresis, etc.? – Dave

+0

Plus - el contenido de la base de datos se ve bien - tiene los caracteres especiales correctos y todo – Dave

+0

Sí, UTF-8 le permite almacenar y manejar virtualmente cualquier carácter humano correctamente. ¿Cómo estás confirmando el contenido de tu base de datos? Es posible que en realidad esté mirando la basura dos veces manejada de forma incorrecta, que la volvería a mostrar correctamente. – deceze

0

Esto es probablemente un problema menor de Cake y más un problema de PHP/MySQL. (Otros ya han criado codificación, así que voy a saltar esa.)

Las comillas simples significa una cadena literal de entregarlos a MySQL: 'Item.name != ' => ''

PHP (al estilo de la torta), probablemente analiza esa cadena literalmente. De hecho, se podría incluso ser analizarlo gusto:

"Item.name != " 

(?! En cuenta que no hay nada después del operando y si cae por última vez en la consulta SQL, la consulta no habría error, es probable que todavía funcionan)

cuando la intención para que la prueba:

"Item.name != ''" 

(nota vacía comillas simples incluyen ahora en la cadena)

sin embargo, puesto que no está recibiendo un error - y el resto de la tirones de datos! - Es probable que desee editar esa declaración, porque su problema es más probable sintaxis.

'Item.name IS NOT NULL' 
'Item.name <> ' => '' 
'Item.name IS NOT' => '' 

Dale una oportunidad.

http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html que describe IS NOT NULL vs IS NOT (bool) contra <> y! = (No es igual a).

HTH :)

Cuestiones relacionadas