• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

AYUDA Guardar en Mysql cadena de texto con ' a través de PHP

ingenierobis

Nuevo
Registrado
8 Feb 2018
Mensajes
5
Puntos
0
Buenas tardes,

Tengo el siguiente código en php para guardar un comentario de texto:

PHP:
    $coment = $_POST['coment'];    $id_vap = $_GET['id'];    $id_usu = $_SESSION['id'];    $data_mod = '0000-00-00 00:00:00';

        $insertar_com = "INSERT INTO comentarios(comentario, id_vap, id_usu, data, data_mod) VALUES ('$coment', '$id_vap', '$id_usu', NOW(), '$data_mod')";

A continuación hay las líneas de texto para conectarse a la base de datos e insertar la fila.

El código me funciona bien siempre y cuando el texto no contenga ningún carácter ', ya que supongo que interfiere con las comillas de '$coment'

Alguien me podría ayudar a solucionar éste problema?

Muchas gracias de antemano,

Un saludo!
 
Hace mucho que no toco bases de datos, pero supongo que si lo encapsulas con Comillas dobles "" dentro te entran comillas simples. Eso sí, tendrías problemas con las comillas dobles, supongo.

Creo que lo que mejor te vendrá, creo, es la parametrización de las sentencias (prepared statement o sentencias preparadas) y así de paso te proteges un poco contra SQLInjection.

PHP: Sentencias Preparadas - Manual

PHP: Sentencias preparadas y procedimientos almacenados - Manual

Inyeccion SQL - Wikipedia, la enciclopedia libre

Ataques de inyeccion SQL: que son y como protegerse - Pressroom HostaliaPressroom Hostalia

PHP Prepared Statements


Yo los leería todos que nunca está de más xD
 
Con esa forma de programar, siempre vas a tener problemas. Lo suyo es hacer lo que indica el compañero @Moebius

He aquí un ejemplo
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO comentarios(comentario, id_vap, id_usu, data, data_mod) VALUES (?, ?, ?, ?, ?)";
$q = $pdo->prepare($sql);
$q->execute(array($coment, $id_vap, $id_usu, NOW(), $data_mod));
Database::disconnect();
 
Con esa forma de programar, siempre vas a tener problemas. Lo suyo es hacer lo que indica el compañero @Moebius

He aquí un ejemplo

Hace mucho que no toco bases de datos, pero supongo que si lo encapsulas con Comillas dobles "" dentro te entran comillas simples. Eso sí, tendrías problemas con las comillas dobles, supongo.

Creo que lo que mejor te vendrá, creo, es la parametrización de las sentencias (prepared statement o sentencias preparadas) y así de paso te proteges un poco contra SQLInjection.

PHP: Sentencias Preparadas - Manual

PHP: Sentencias preparadas y procedimientos almacenados - Manual

Inyeccion SQL - Wikipedia, la enciclopedia libre

Ataques de inyeccion SQL: que son y como protegerse - Pressroom HostaliaPressroom Hostalia

PHP Prepared Statements


Yo los leería todos que nunca está de más xD

Leer mas: Guardar en Mysql cadena de texto con ' a través de PHP
Moebius kakadeluxe De acuerdo, investigare un poco sobre las sentencias preparadas, muchas gracias por la información!

Un saludo!
 
Buenas tardes,

Tengo el siguiente código en php para guardar un comentario de texto:

PHP:
    $coment = $_POST['coment'];    $id_vap = $_GET['id'];    $id_usu = $_SESSION['id'];    $data_mod = '0000-00-00 00:00:00';

        $insertar_com = "INSERT INTO comentarios(comentario, id_vap, id_usu, data, data_mod) VALUES ('$coment', '$id_vap', '$id_usu', NOW(), '$data_mod')";

A continuación hay las líneas de texto para conectarse a la base de datos e insertar la fila.

El código me funciona bien siempre y cuando el texto no contenga ningún carácter ', ya que supongo que interfiere con las comillas de '$coment'

Alguien me podría ayudar a solucionar éste problema?

Muchas gracias de antemano,

Un saludo!

Mirate el mysqli:real_escape_string, lo más correcto suele ser parametrizar las consultas como te han dicho arriba, meter variables PHP directamente al SQL es una chapuza, no recomendable en entornos públicos. En el mejor de los casos puede pasarte lo que a ti que falle y en el peor de los casos que entre alguien que sepa y te borre la BD...
 
Arriba