0

wpdbに関する私の問題について、いくつかのドキュメントと他の人からの同様の質問を読みましたが、非常に異なる回答を見たので、少し混乱しています。

私がやろうとしているのは、Wordpress の (最終的には) 約 250 ページからカスタム メタ データを取得することです。wpdb リクエストは header.php にあり、コードは Google マップの入力として機能する配列を構築する必要があります。カスタム メタ フィールドは、_ytF_f_name、_ytF_f_lat、_ytF_f_lng と呼ばれます (理由は聞かないでください :-))。

したがって、最終的な出力は次のようになります[name1,lat1,lng1], [name2,lat2,lng2],

接頭辞 yt_ (wp-config.php で定義) を持つ Wordpress 用のカスタム テーブルを使用しています。カスタム メタは WPAlchemy で構築されています。データベースを確認したところ、メタデータがそこにあります (postmeta テーブルにあります)。

いくつかのことを組み合わせた後、これは私が今持っているものです:

<?php
global $wpdb;
$querystr = "SELECT ".$wpdb->prefix."postmeta._ytF_f_name, ".$wpdb->prefix."postmeta._ytF_f_lat, ".$wpdb->prefix."postmeta._ytF_f_lng FROM ".$wpdb->prefix."postmeta WHERE post_type='page'";
$vars = $wpdb->get_results($querystr);
foreach ($vars as $var) {
echo '[' . $var->_ytF_f_name . ',' . $var->_ytF_f_lat . ',' . $var->_ytF_f_lat . '],';
}
?>

出力が空白なので、何が欠けているのでしょうか?

これに関連する別の質問は次のとおりです。SQLインジェクションから保護するための「準備」について読んだことがあります。

変更する準備クラスの正しい使用法

$vars = $wpdb->get_results($querystr);

の中へ:

$vars = $wpdb->get_results($wpdb->prepare($querystr));

?

4

1 に答える 1

0

$wpdb->show_errors();あなたの問題については、エラーが表示されないため、クエリの前にSQL エラーがあるかどうかを確認してください (doc here )。

prepare メソッドは、SQL インジェクションから保護します。ドキュメントが言ったように、次のように機能します。

 $wpdb->query(
    $wpdb->prepare(
       "INSERT INTO ___
       ( attr1, attr2 )
       VALUES ( %s, %d )",
       $valueOfAttr1,
       $valueOfAttr2
    )
 );

もちろん、必要に応じて型と値を変更する必要があります。

于 2013-02-10T13:44:40.670 に答える