¿Cómo convertir mysql_real_escape_string a PHP7?

2 minutos de lectura

avatar de usuario
Mariano Rick

Tengo un sistema WordPress ejecutándose en PHP 7.0.11 usando WordPress. Un complemento que quiero usar no funciona y la verificación de los registros da como resultado

Error fatal de PHP: error no detectado: llamada a la función no definida mysql_real_escape_string() en…

Buscando este mensaje de error he encontrado que el mysql_real_escape_string() la extensión quedó en desuso.

¿Cómo puedo convertir esta declaración para que funcione en PHP 7 y superior?

$ids = mysql_real_escape_string( $ids );
$result = $wpdb->query( "DELETE FROM $table_name WHERE id IN( $ids )" );

He encontrado esto en los documentos de WordPress: wpdb::_real_escape()

  • obtener una versión actualizada del complemento? El código parece vulnerable a la inyección de sql

    – Profesor Abronsius

    19 de octubre de 2016 a las 7:48

  • ¿Puedo usar un mysqli extensión en WordPress, ya que está usando wpdb? RamRaider el complemento es bastante simple y ya no está desarrollado.

    – Marian Rick

    19 oct 2016 a las 7:50

  • Como dijo @RamRaider, debe actualizar o usar otro complemento. No es realmente seguro no usar mysqli_* o PDO. De todos modos, este complemento parece no ser compatible con PHP 7

    – Debflav

    19 de octubre de 2016 a las 7:54


  • He encontrado esto en los documentos de wp. ¿Es esta una “solución alternativa” de WordPress para reemplazar mysql_real_escape_string con real_escape? desarrollador.wordpress.org/reference/classes/wpdb/_real_escape

    – Marian Rick

    19 de octubre de 2016 a las 7:55

  • No estoy familiarizado con WordPress pero parece que esta función está usando mysql_real_escape_string o mysqli_real_escape_string siguiendo sus controladores actuales.

    – Debflav

    19 de octubre de 2016 a las 7:58

avatar de usuario
barot viral

puedes usar la función nativa de wordpress

wpdb::_real_escape( string $string )

o

$query = $wpdb->prepare(
  "SELECT post_title from $wpdb->posts
  WHERE post_title LIKE %s",
  "%" . $myTitle . "%"
);

encuentra más aquí

  • Gracias, pero ya he encontrado esto en la documentación. Tengo problemas para aplicarlo. ¿Podrías aplicarlo a mi código? (Lo es wpdb:: o solo _real_escape o real_escapeya que no estoy familiarizado con el uso de php)

    – Marian Rick

    19 oct 2016 a las 8:00

  • puede usar prepare() si quiere algo como esto $consulta = $wpdb->prepare( “SELECCIONE post_title from $wpdb->posts DONDE post_title LIKE %s”, “%” . $myTitle . “%” );

    – barot viral

    19 oct 2016 a las 8:05

  • Entonces, ¿la solución es usar un complemento no compatible y cambiar todas las funciones con declaraciones preparadas? Use este complemento bajo su propio riesgo.

    – Debflav

    19 de octubre de 2016 a las 8:13

  • la solución real es encontrar y reemplazar todo mysql_real_escape_string con esc_sql desde su complemento

    – barot viral

    19 oct 2016 a las 8:20

  • @viralbarot ¡Muchas gracias! Solucionado mi problema

    – Marca

    6 de julio de 2017 a las 17:03

¿Ha sido útil esta solución?