¿Por qué mi cadena SQL con comillas simples no se inserta?

Debe escapar de las comillas simples con una de las secuencias de escape compatibles; de lo contrario, MySQL no puede distinguir las comillas que delimitan su cadena de las comillas que desea tener dentro. Las barras invertidas son populares, pero también puede usar una comilla simple adicional si lo prefiere. (O simplemente envuelva la cadena entre comillas dobles).

INSERT ... 'Killian's Irish Red' ... debería ser uno de:

  • INSERT ... 'Killian\'s Irish Red' ...
  • INSERT ... 'Killian''s Irish Red' ...
  • INSERT ... "Killian's Irish Red" ...

También hay otras opciones, pero creo que son las más sencillas.

http://dev.mysql.com/doc/refman/…

Se debe a que está creando SQL insertando cadenas proporcionadas por el usuario en sus comandos SQL, por ejemplo: “SELECCIONAR * DESDE el usuario DONDE nombre de usuario = $ nombre de usuario”.

Esto tiene varios problemas:

  1. Eres vulnerable a la piratería de inyección SQL. ¿Qué sucede si alguien intenta iniciar sesión con un nombre de usuario de ”; DROP TABLE USUARIOS; –
  2. Su base de datos no puede almacenar en caché las consultas de manera eficiente

La respuesta es utilizar parámetros vinculados en sus consultas. Cada idioma puede manejar parámetros enlazados, su base de datos puede almacenar en caché las consultas con parámetros enlazados y no tiene que preocuparse por la inyección de SQL.

Simplemente cambie sus datos en línea por un signo de interrogación y proporcione los valores reales al ejecutar. Aquí hay un ejemplo de PHP:

 $stmt = $dbh->prepare("SELECT * FROM user WHERE name = ?"); $stmt->bindParam(1, $name); 

Es un poco más complicado, pero es mucho, mucho mejor que enviar datos no confiables a su base de datos.

Otras respuestas han advertido correctamente sobre los riesgos de la inyección SQL. Si está interesado en profundizar, escribí una presentación que habla sobre la inyección SQL con mucho detalle:
http://www.slideshare.net/billka

La respuesta de Bulat es correcta. Si sus cadenas de consulta usan comillas simples, por ejemplo, INSERT INTO mytable VALUES ('$beer'); luego, cuando esa cadena se interpola, el código se romperá porque hay una comilla simple sin escape que se interpreta como el final del literal de la cadena.

Una solución es escapar de sus cadenas, otro enfoque mejor es usar consultas preparadas. En PHP puedes hacer esto usando las bibliotecas PDO y MySQLi.

El apóstrofe, o comilla simple, es un carácter especial en SQL que especifica el comienzo y el final de los datos de cadena. Esto significa que para usarlo como parte de sus datos de cadena literal, necesita escape del carácter especial. Con una cotización simple, esto se logra duplicando su cotización. (Dos caracteres de comillas simples, no comillas dobles en lugar de comillas simples).

Ejemplo:

En lugar de usar ‘Killian’s Irish Red’, inserte una comilla simple dos veces como se muestra a continuación.

SELECCIONE ‘Killian”s Irish Red’.

Esto debería funcionar bien.

Si la cadena es un literal en una instrucción SQL, entonces las comillas dentro de la cadena se deben escapar duplicándolas. Por ejemplo:

INSERTAR EN LAS VENTAS (MARCA, CANTIDAD, CANTIDAD) VALORES (‘Killian”s Irish Red’, 24,24.00);

Gracias a algunas de las respuestas que me señalaron en la dirección correcta, descubrí lo que tenía que hacer. Como algunos de los que respondieron declararon que necesito escapar de citar algunas cosas. Pero necesitaba hacerlo automáticamente en php y encontré esto que resolvió mis problemas:

http://php.net/manual/en/functio