Es obligatorio usar $ wpdb-prefix en tablas personalizadas

13

Lo siento si esta pregunta es trivial. Estoy empezando a desarrollar complementos en WordPress.

En todos los tutoriales encontré esto: al crear las tablas personalizadas, se usa $wpdb->prefix .

Ejemplo:

$table_name = $wpdb->prefix . "liveshoutbox";

Mi pregunta:

  

¿Es obligatorio usar $wpdb->prefix ? ¿Qué sucede si no uso el prefijo para mis tablas personalizadas?

    
pregunta newbie 31.05.2015 - 10:49

2 respuestas

19

Es obligatorio, aunque no se aplica.

Considere el escenario cuando dos sitios de Wordpress se han configurado en la misma base de datos. Uno con el prefijo wp_ y otro con wp2_ . Si instala su complemento en ambos sitios con el prefijo, las tablas creadas serán wp_liveshoutbox para el primer sitio y wp2_liveshoutbox para el segundo sitio. Pero si omite el prefijo, ambos sitios usarán la misma tabla llamada liveshoutbox y todo se dividirá.

    
respondido por el sakibmoon 31.05.2015 - 10:58
4

Considera lo siguiente:

Su complemento se usa en una red de wordpress, que usa diferentes prefijos de tabla para cada sitio. Su complemento podría ejecutarse simultáneamente en 836 sitios diferentes, todos en la misma base de datos. wp_385677_liveshoutbox es un nombre de tabla perfectamente razonable.

Su complemento es instalado por un usuario que tiene algún concepto de seguridad y ha cambiado el prefijo de la tabla para bloquear los bots que intentan inyectar select * from wp_users en el sistema. Incluso si encuentran una nueva vulnerabilidad, no funcionará.

Tomar accesos directos como nombres de tablas de codificación es una buena manera de hacer que un producto esté en funcionamiento, pero no es una buena manera de lanzarlo. en muy poco tiempo, el complemento tendrá un montón de comentarios "no funciona", en el peor de los casos, romperá el sitio de otra persona.

Si tengo una consulta compleja y no quiero lidiar con el dolor de escribir 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id .... , puedes usar reemplazos. Por ejemplo:

$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';

$change = array (
    '%table%' => $wpdb->prefix . '_mytable',
    '%meta%'  => $wpdb->prefix . '_mytablemeta'
    );


$sql = str_replace( array_keys( $change ), array_values( $change ), $query );

$results = $wpdb->get_results( $sql );

Wordpress está cambiando constantemente. Lo que "funciona" hoy puede no funcionar mañana. Es por eso que hay funciones de API. Los desarrolladores de Wordpress se asegurarán de que el comportamiento de la API pública sea consistente (o depreciarán la función). Si empiezas a usar las llamadas a métodos internos porque es "más rápido de esa manera", generalmente volverá a morderte. Hay muy pocos accesos directos verdaderos en el software: solo mueven el trabajo requerido de ahora en adelante, y al igual que su tarjeta de crédito, "más tarde" generalmente cuesta más.

    
respondido por el paul 31.05.2015 - 15:48

Lea otras preguntas en las etiquetas