Özel tablolarda $ wpdb-> önekinin kullanılması zorunlu mu?


16

Bu soru önemsizse üzgünüm. WordPress'te eklentiler geliştirmeye yeni başladım.

Tüm öğreticilerde buldum: özel tablolar oluştururken $wpdb->prefixkullanılır.

Misal:

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

Benim sorum:

Kullanmak zorunlu $wpdb->prefixmu? Özel tablolarım için önek kullanmazsam ne olur?

Yanıtlar:


22

Zorunlu olmasa da zorunludur.

Aynı veritabanında iki Wordpress sitesi kurulduğunda senaryoyu düşünün. Biri önek wp_, diğeri wp2_. Eklentinizi öneki olan her iki siteye de yüklerseniz, oluşturulan tablolarınız wp_liveshoutboxilk site ve wp2_liveshoutboxikinci site için olacaktır. Ancak öneki atlarsanız, sitenin her ikisi de adlı aynı tabloyu kullanır liveshoutboxve her şey parçalanır.


12
Başka bir deyişle zorunludur . :)
Rarst

4

Aşağıdakileri göz önünde bulundur:

Eklentiniz, her site için farklı tablo önekleri kullanan bir wordpress ağında kullanılır. Eklentiniz, hepsi aynı veritabanında bulunan 836 farklı sitede aynı anda çalışıyor olabilir. wp_385677_liveshoutboxson derece makul bir masa adıdır.

Eklentiniz, bazı güvenlik kavramlarına sahip olan select * from wp_usersve sisteme enjekte etmeye çalışan botları engellemek için tablo önekini değiştiren bir kullanıcı tarafından yüklenir . Yeni bir güvenlik açığı bulsalar bile işe yaramaz.

Sabit kodlama tablosu adları gibi kısayolları almak, bir ürünü çalıştırıp çalıştırmanın iyi bir yoludur, ancak serbest bırakmanın iyi bir yolu değildir. çok kısa sürede eklenti üzerinde bir "işe yaramaz" yorumlar yığını olacak, en kötü durumda başka birinin sitesini kıracak.

Karmaşık bir sorgu varsa ve yazma acı ile uğraşmak istemiyorsanız 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....yerine kullanabilirsiniz. Örneğin:

$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 sürekli değişiyor. Bugün "işe yarayan" yarın işe yaramayabilir. Bu yüzden API fonksiyonları var. Wordpress geliştiricileri, genel API davranışının tutarlı olmasını sağlar (veya işlevi amortismana tabi tutar). Dahili yöntem çağrılarını kullanmaya başlarsanız 'bu şekilde daha hızlı' olur, genellikle sizi ısırmaya geri döner. Yazılımda çok az gerçek kısayol var - sadece gerekli işi şimdiden sonrasına taşıyorlar ve kredi kartınızın "daha sonra" olması genellikle daha pahalı.


Bu çok siteden bahsettiğinden, cevabında görmediğim bir ek unsur $wpdb->prefix . "users", kullanımının çok siteli bir kurulumda geçersiz bir tabloya neden olacağıdır. Bunun nedeni, tabloya db önekini yapıştırmasıdır. Ancak, tüm kullanıcılar ağ kullanıcısı olduğu için çoklu site yalnızca bir kullanıcı tablosu kullanır. Sorgu wp_users veya wp_usermeta tabloları içeriyorsa Yani, kullanmak gerekir $wpdb->usersveya $wpdb->usermetasırasıyla.
butlerblog
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.