it-swarm.com.de

Hilfe bei der Konvertierung von MySQL zu WPDB-Abfragen

Ich habe ein Problem. Ich habe ein PHP -Skript, das die einzelnen Dateidownloads protokolliert, und suche nach einer Möglichkeit, diese Zahl in einzelnen Posts anzuzeigen. Ich habe eine halbherzige Lösung - ein einfaches altes manuelles MySQL-Verbindungsskript, aber ich versuche, es in ein Wordpress-Plugin umzuwandeln (ich möchte, dass es WPDB verwendet). Ich habe versucht, es zu konvertieren, aber ich weiß nicht, was die Wordpress-Alternative zu "mysql_fetch_array" ist. Trotzdem habe ich das ursprüngliche Skript eingefügt unten, sowie meine Fortschritte bei einer Wordpress-freundlichen Version.

Einfache Version:

function mb_download_count() {
    global $post;
    if (get_post_meta($post->ID, 'zipname', TRUE)) {
        $namemeta = get_post_meta($post->ID, 'zipname', TRUE);

        require $_SERVER['DOCUMENT_ROOT'].'/downloader-connect.php';
        $result = mysql_query("SELECT * FROM mb_download_manager
                                    WHERE filename='".$namemeta.".Zip'");  

            // get the first (and hopefully only) entry from the result
        $row = mysql_fetch_array( $result );
            // Print out the contents of each row into a table 
        if ($row['downloads'] == '') { echo ('0'); } else {
        echo $row['downloads']; }
        } else { }
}

Bisherige Wordpress-freundliche Version:

function mb_download_count() {
    global $wpdb;
    global $post;
    if (get_post_meta($post->ID, 'zipname', TRUE)) {
        $namemeta = get_post_meta($post->ID, 'zipname', TRUE);

        $result = $wpdb->query("SELECT * FROM mb_download_manager
                                    WHERE filename='".$namemeta.".Zip'");  

        $row = mysql_fetch_array( $result );
        if ($row['downloads'] == '') { echo ('0'); } else {
        echo $row['downloads']; }
        } else { }
}
1
Matt

Verwenden Sie anstelle von $wpdb->query()$wpdb->get_results(). Mit dieser Methode können Sie einen Rückgabetyp angeben, damit die Abfrage als assoziatives Array zurückgegeben wird. Zum Beispiel ...

$results = $wpdb->get_results(
    "SELECT * FROM mb_download_manager
     WHERE filename='" . $namemeta . ".Zip'",
    ARRAY_A
);

Dies gibt ein indiziertes Array von assoziativen Arrays zurück, sodass Sie die Ergebnisse durchlaufen können:

foreach( $results as $row ) {
    if ( $row['downloads'] == '') // ... and so on

Wenn Sie nicht weiterkommen, überprüfen Sie die Codex-Dokumentation .

Bearbeite 1/13

Wenn Sie alle Downloads zusammenfassen möchten, müssen Sie zwei Dinge tun:

  1. Halte eine laufende Summe
  2. Wandeln Sie Ihre Variable richtig in eine Zahl um.

Bevor Sie also Ihre foreach-Schleife ausführen, deklarieren Sie einen Download-Zähler:

$counter = 0;
foreach( $results as $row ) {
    // etc ...

Diese Variable enthält eine laufende Summe Ihrer Downloads.

Als nächstes müssen Sie die Anzahl der Downloads zu Ihrem Zähler hinzufügen:

$counter = 0;
foreach( $results as $row ) {
    $counter += intval( $row['downloads'] );
    // etc ...

Die Funktion intval() nimmt eine gemischte Variable auf und gibt ihren ganzzahligen Wert zurück. So wird die Zeichenfolge "0" zur Ganzzahl 0. Auf diese Weise können Sie die Ergebnisse tatsächlich hinzufügen , anstatt die Zeichenfolgen zu verketten (z. B. "1" + "2" = "12", aber 1 + 2 = 3).

1
EAMann

Da Sie nur einen einzelnen Wert aus einer einzelnen Spalte möchten, können Sie die Methode get_var anstelle der Abfragemethode verwenden. Auf diese Weise müssen Sie keine Ergebnisse durchlaufen (Sie erhalten das Ergebnis als Zeichenfolge). In Ihrem Fall würden Sie also Folgendes tun:

$downloads = $wpdb->get_var($wpdb->prepare("SELECT downloads FROM mb_download_manager WHERE filename=%s", $namemeta.".Zip"));

Dann können Sie das Ergebnis einfach wiedergeben:

echo $downloads;

Weitere Informationen finden Sie auf der wpdb-Codexseite . Dort finden Sie auch eine lange Liste zusätzlicher wpdb-Methoden, die je nach Ihrer Situation verwendet werden können. Einige von ihnen, wie die Einfügemethode, sind viel einfacher zu verwenden als das Schreiben von direktem SQL.

Beachten Sie auch die Verwendung der Vorbereitungsmethode, die dazu beiträgt, Injektionen und Junk zu vermeiden. Es ist nicht erforderlich, aber es ist eine gute Übung. Beachten Sie auch, dass sich diese Tabelle in Ihrer WordPress-Datenbank befinden muss.

1
MathSmath