ProcessWire - Datenbank manuell abfragen: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 1: Zeile 1:
 
  https://processwire.com/talk/topic/1684-reading-and-displaying-data-from-a-custom-table/
 
  https://processwire.com/talk/topic/1684-reading-and-displaying-data-from-a-custom-table/
 
  http://processwire.com/api/include/ (Bootstraping -> import data to recide in PW
 
  http://processwire.com/api/include/ (Bootstraping -> import data to recide in PW
 +
 +
== überblick ==
 +
Es gibt verschhiedene Möglichkeiten
 +
 +
PDO Style mit $database Variable
 +
<pre>
 +
// mysqli will be depricated, so use PDO if you start with it
 +
 +
$sql = "awesome query";
 +
// $database variable is available in your templates. $database is the PDO way.
 +
$query = $database->prepare($sql);
 +
$query->execute();
 +
</pre>
 
== Snippets ==
 
== Snippets ==
 
=== Datenbankabfrage aus PW ===
 
=== Datenbankabfrage aus PW ===

Version vom 5. Juni 2019, 06:39 Uhr

https://processwire.com/talk/topic/1684-reading-and-displaying-data-from-a-custom-table/
http://processwire.com/api/include/ (Bootstraping -> import data to recide in PW

überblick

Es gibt verschhiedene Möglichkeiten

PDO Style mit $database Variable

// mysqli will be depricated, so use PDO if you start with it

$sql = "awesome query";
// $database variable is available in your templates. $database is the PDO way.
$query = $database->prepare($sql);
$query->execute();

Snippets

Datenbankabfrage aus PW

$result = $this->db->query("SELECT id, name, title, url FROM yourtablename WHERE id=$id");

Seiten (mit URL) aus externer Tabelle generieren

But if that data needs to stay external, then Sinnut's solution is a good way to go. You would use the DB's primary key (or some other unique column) to serve as the urlSegment that loads the page. You'd setup one page/template to handle all that data, and it would find it like this:

$key = (int) $input->urlSegment1; 
if(!$key) throw new Wire404Exception();

$result = $yourDB->query("SELECT make, model, year FROM your_table WHERE id=$key"); 
if(!$item->num_rows) throw new Wire404Exception();

list($make, $model, $year) = $result->fetch_row();

echo "<ul>";
echo "<li>Make: $make</li>";
echo "<li>Model: $model</li>";
echo "<li>Year: $year</li>";
echo "</ul>";

Externe Datenbank nutzen

Working with an external database can be pretty simple:

 
    protected function externalDbConnect(){  
        $this->extDb = new mysqli('localhost', 'xxxx', 'yyyy', 'zzzz');
    }
    protected function queryCount($qry){
        $result = $this->extDb->query($qry);
        return $result->num_rows;
    }        
    protected function queryForFields($table){
        $a = array();
        $result = $this->extDb->query('SHOW COLUMNS FROM '.$table);
        while($row = $result->fetch_array(MYSQLI_ASSOC)) $a[] = $row['Field'];
        return $a;
    }