Wert in Datenbank in bestimmte Zelle schreiben

Bloli

Grünschnabel
Hi@all! :)

Ich bin neu in PHP, MySQL und dem ganzen Zeug. Weil ich aber eine Funktion in meinem Wordpress-Blog haben wollte, die es nicht als Plugin/Widget oder so was gibt, musste ich mich damit auseinander setzen.

Hier mal die Funktion:
PHP:
function TagValueBestimmen($term) {
    $term_id = $term->term_id;
    $tag_value = $term->tag_value;
    $count = $term->count;
    $newtv = (1+$tag_value*$count)/$count;

    var_dump($newtv);

    //$sql = 'INSERT INTO $wpdb->term_taxonomy(tag_value) VALUES ($tag_value) WHERE term_id = $term_id;';
}

"var_dump($newtv);" spuckt den richtigen Wert aus. Also ist bis dahin alles ok.
Die Frage ist nur: Wie kann ich diesen Wert jetzt in die Datenbank schreiben?
Ich habe keine Erfahrung damit.
Ich möchte, dass $newtv in die Tabelle "term_taxonomy" in die Spalte "tag_value" und der Zeile, in der "term_id" = $term_id ist, geschrieben wird. Klingt irgendwie kompliziert, und genau das ist es auch für mich! ^^
Kann mir jemand erklären, wie ich das schreiben muss?
 

Sven Mintel

Mitglied
Moin Bloli,

was du benötigst, ist ein UPDATE statt eines INSERT

INSERT fügt neue Datensätze ein, UPDATE ändert bereits vorhandene.
 

Bloli

Grünschnabel
Danke, für den Rat!
Aber ich versteh immer noch nicht die Syntax....

Ich hab jetzt wieder verschiedene Tutorials gegoogelt, die "UPDATE" behandeln, und mich da durch gekämpft...
Aber irgendwie funktioniert das bei mir einfach nicht.
Hier erstmal der rohe Inhalt - ohne jegliches PHP-Zeug drumherum:
PHP:
UPDATE
    term_taxonomy
SET
    tag_value = $tag_value
WHERE
    term_id = $term_id

Jetzt weiß ich aber auch nicht, ob das bei Wordpress nicht irgendwie anders ist als bei "normalem" PHP: Wenn dort auf eine Tabelle zugegriffen wird, steht da meist "$wpdb->term_taxonomy" (Oder statt "term_taxonomy" der jeweilige Tabellenname). Wenn ich mir aber über PHPMyAdmin die MySQL-Datenbank ansehe, heißt die Tabelle "wp_term_taxonomy" - es steht also immer ein "wp_" davor, dass ich aber innerhalb der Wordpress-Dateien bei keinem Tabellenaufruf bisher gesehen habe.
Außerdem gibt es anscheinend eine eigene Funktion "update($table, $data, $where)" bei Wordpress:
PHP:
/**
 * Update a row in the table with an array of data.
 *
 * @since 2.5.0
 *
 * @param string $table WARNING: not sanitized!
 * @param array $data Should not already be SQL-escaped
 * @param array $where A named array of WHERE column => value relationships.  Multiple member pairs will be joined with ANDs.  WARNING: the column names are not currently sanitized!
 * @return mixed Results of $this->query()
 */
function update($table, $data, $where){
	$data = add_magic_quotes($data);
	$bits = $wheres = array();
	foreach ( array_keys($data) as $k )
		$bits[] = "`$k` = '$data[$k]'";

	if ( is_array( $where ) )
		foreach ( $where as $c => $v )
			$wheres[] = "$c = '" . $this->escape( $v ) . "'";
	else
		return false;
			
	return $this->query( "UPDATE $table SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres ) );
	}

Wenn von Wordpress-eigenen Funktionen auf diese Funktion zugegriffen wird, sieht das so aus:
PHP:
$wpdb->update( $wpdb->terms, compact('term_group'), array( 'term_id' => $alias->term_id ) );
Aber auch diese Syntax versteh ich nicht... :confused: Ich habe auch schon versucht, diese Zeile auf meine Sachen umzuschreiben - Aber es kommen nur irgendwelche Fehlermeldungen! :(
 

Sven Mintel

Mitglied
Das wp_ wird ein Prefix sein, welches Wordpress vor alle Tabellennamen hängt, um Konflikte mit bereits vorhandenen Tabellen bei der Installation zu vermeiden.

Wordpress wird dieses Prefix aus einer Konstante beziehen, deswegen siehst du es nirgends bei Tabellenzugriffen, du kannst aber davon ausgehen, dass die Tabelle wp_term_taxonomy heisst, wenn PHPMyAdmin das sagt....du musst also in deinem UPDATE den Tabellennamen entsprechend anpassen.
 

Bloli

Grünschnabel
HAAAALLELUJA! Es funktioniert! :D

Durch diese einfache Zeile:
PHP:
mysql_query("UPDATE wp_term_taxonomy SET tag_value = $newtv WHERE term_id = $term_id;") or die("failed");
Danke, für all eure Antworten! =)