Luego de tanto batallar hemos dado con el resultado de este enigma que agunos usuarios de esta web han tenido. Si quieres aportar algún detalle puedes dejar tu información.
Solución:
Debería escapar de cada una de estas cadenas (en ambos fragmentos) con mysql_real_escape_string()
.
http://us3.php.net/mysql-real-escape-string
La razón por la que sus dos consultas se comportan de manera diferente es probablemente porque tiene magic_quotes_gpc
encendido (que debe saber que es una mala idea). Esto significa que las cadenas recopiladas de $_GET, $_POST y $_COOKIES se escapan para usted (es decir, "O'Brien" -> "O'Brien"
).
Una vez que almacene los datos, y luego los recupere nuevamente, el string vuelves de la base de datos no ser automáticamente escapado para usted. volverás "O'Brien"
. Entonces, tendrás que pasarlo mysql_real_escape_string()
.
Para cualquiera que encuentre esta solución en 2015 y siga adelante…
los mysql_real_escape_string()
La función está en desuso a partir de PHP 5.5.0.
Ver: php.net
Advertencia
Esta extensión está obsoleta a partir de PHP 5.5.0 y se eliminará en el futuro. En su lugar, se debe utilizar la extensión MySQLi o PDO_MySQL. Consulte también MySQL: elección de una guía de API y preguntas frecuentes relacionadas para obtener más información. Las alternativas a esta función incluyen:
mysqli_real_escape_string()
PDO::quote()
Deberías hacer algo como esto para ayudarte a depurar
$sql = "insert into blah values ('$myVar')";
echo $sql;
Probablemente encontrará que la comilla simple se escapa con una barra invertida en la consulta de trabajo. Esto podría haberlo hecho automáticamente PHP a través de la configuración magic_quotes_gpc, o tal vez lo haya hecho usted mismo en alguna otra parte del código (addslashes y stripslashes pueden ser funciones para buscar).
Ver Cotizaciones mágicas
Si entiendes que te ha sido de utilidad nuestro post, nos gustaría que lo compartas con otros seniors así nos ayudas a difundir esta información.