Felix Riesterer: Update einer Chatfunktion

Beitrag lesen

Lieber j4nk3y,

Für PDO könnte ich Dir eine klitzekleine Klasse anbieten, die Dir im Hintergrund etwas vereinfacht,[...] Woher kommen die funktion get() bzw. send() [aus deiner Antwort], ich finde diese nicht im Manual?

natürlich nicht, die gehören ja zu meiner Klasse, die auf PDO aufbaut. Hier für Dich meine Datenbank-Klasse:

<?php
/**
 * database handling
 */

class MyPDO {

  /**
   * error messages
   *
   * @var array
   */
  public  $errors;

  /**
   * PDO instance
   *
   * @var object PDO instance
   */
  private $pdo;

  /**
   * constructor
   *
   * This function needs an array with these keys:
   * $settings = array(
   *     'db-host' => (string),
   *     'db-name' => (string),
   *     'db-user' => (string),
   *     'db-pw' => (string)
   * )
   *
   * @param array
   */
  public  function __construct ($settings) {
    $t = $this;

    $t->errors = array();

    try {

      $t->pdo = new PDO(
        sprintf(
          'mysql:dbname=%1$s;host=%2$s;charset=UTF8;',
          $settings['db-name'],
          $settings['db-host']
        ),
        $settings['db-user'],
        $settings['db-pw'],
        array(
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
          PDO::MYSQL_ATTR_FOUND_ROWS => true,
          PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        )
      );

    } catch (PDOException $e) {

      $t->errors[] = $t->get_error($e);
    }
  }

  /**
   * wrapper for PDO::prepare, PDOStatement::execute
   * and PDOStatement::fetchAll
   *
   * This function passes the parameters through to the PDO object.
   *
   * @param string SQL
   * @param array parameters list
   * @param int column number for PDO::FETCH_COLUMN fetch mode
   * @return array result sets
   */
  public  function get ($sql = '', $params = array(), $col = null) {
    $t = $this;

    $r = array();

    if (empty($sql)) {
      return $r;
    }

    $st = $t->pdo->prepare($sql);

    try {

      $st->execute($params);

      $r = (
        !is_null($col) && is_numeric($col)
        ? $st->fetchAll(PDO::FETCH_COLUMN, $col)
        : $st->fetchAll(PDO::FETCH_ASSOC)
      );

    } catch (PDOException $ex) {

      $t->errors[] = $t->get_error(
        $ex,
        array('sql' => $sql, 'params' => $params)
      );
    }

    return $r;
  }

  /** function to extract error code information
   *
   * @param PDOException object
   * @param array with SQL query data
   */
  private function get_error ($e, $query) {
    $error = sprintf(
      'DB returned an error:'."\r\n"
      . '%1$s'."\r\n"
      . 'Query:'."\r\n"
      . '%2$s',
      $e->getMessage(),
      print_r($query, true)
    );

    return $error;
  }

  /**
   * function to send a query to the DB
   *
   * This function passes the parameters through to the PDO object.
   *
   * @param string SQL
   * @param array parameters list
   * @return int number of affected rows
   */
  public  function send ($sql = '', $params = array()) {
    $t = $this;

    if (empty($sql)) {
      return;
    }

    $st = null;

    try {

      $st = $t->pdo->prepare($sql);
      $st->execute($params);

    } catch (PDOException $ex) {

      $t->errors[] = $t->get_error(
        $ex,
        array('sql' => $sql, 'params' => $params)
      );

    }

    if (is_object($st) && method_exists($st, 'rowCount')) {
      return $st->rowCount();
    }

    return 0;
  }
}

Wenn Du diese Klasse mit require_once einbindest, dann kannst Du sie so nutzen:

<?php

// DB-Klasse laden
require_once './db-klasse-mit-pdo.php';

// Verbindung zur Datenbank aufbauen
$db = new MyPDO(array(
  'db-host' => 'localhost',
  'db-name' => 'chat',
  'db-user' => 'j4nk3y',
  'db-pw'   => 'sehrgeheim'
));

// in Datenbank schreiben
$db->send(
  // SQL
  'INSERT INTO `chatlog` (`message`, `user`) VALUES (:message, :user);',
  // Parameter für SQL-Platzhalter
  array(
    ':message' => 'hey j4nk3y wassup?',
    ':user' => $_SESSION['login']['user']
  )
));

// von Datenbank lesen
$array = $db->get(
  // SQL
  'SELECT * FROM `chatlog` WHERE `user`=:user;',
  // Parameter
  array(':user' => 'j4nk3y')
);

Liebe Grüße,

Felix Riesterer.

0 151

Update einer Chatfunktion

j4nk3y
  • html
  • javascript
  • php
  1. 2
    Felix Riesterer
    • datenbank
    • php
    • sicherheit
    1. 0
      j4nk3y
      1. 0
        Gunnar Bittersmann
    2. 0
      Gunnar Bittersmann
      1. 0
        Matthias Apsel
        1. 0
          Gunnar Bittersmann
      2. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
      3. 0
        Felix Riesterer
        1. 0
          j4nk3y
          • zur info
          1. 1
            Felix Riesterer
            • php
            • programmiertechnik
            • zur info
            1. 0
              j4nk3y
        2. 0
          Gunnar Bittersmann
    3. 0
      j4nk3y
      1. 0
        Felix Riesterer
        • php
        • programmiertechnik
        • sicherheit
        1. 0
          j4nk3y
          1. 0
            Der Martin
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
          2. 0
            Felix Riesterer
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
              2. 1
                dedlfix
                1. 0
                  Gunnar Bittersmann
                  • typografie
                2. 0
                  j4nk3y
                  1. 0
                    dedlfix
                    1. 0
                      j4nk3y
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            dedlfix
                            1. 0
                              j4nk3y
                              1. 0
                                Der Martin
                                1. 0
                                  j4nk3y
                                  1. 0
                                    Der Martin
                              2. 1
                                dedlfix
                                1. 0
                                  Der Martin
                              3. 0
                                Gunnar Bittersmann
                                • datenbank
                                • programmiertechnik
                                1. 0
                                  j4nk3y
        2. 0
          Der Martin
        3. 0
          Gunnar Bittersmann
          • internationalisierung
          • php
          1. 0
            Felix Riesterer
            1. 0
              Tabellenkalk
              • zitat
              • zu diesem forum
              1. 1
                Matthias Apsel
    4. 0
      1unitedpower
      1. 1
        dedlfix
        1. 1
          1unitedpower
          1. 0
            Christian Kruse
          2. 0
            dedlfix
            1. 0
              1unitedpower
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                  2. 0
                    1unitedpower
                    1. 0
                      Christian Kruse
                      1. 0
                        1unitedpower
                    2. 0
                      dedlfix
                      1. 0
                        1unitedpower
                        1. 0
                          dedlfix
  2. 0
    j4nk3y
    1. 0
      Gunnar Bittersmann
      • html
      1. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
            1. 0
              Matthias Apsel
              1. 0
                j4nk3y
  3. 0
    j4nk3y
  4. 0
    pl
    1. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            dedlfix
            1. 0
              j4nk3y
              1. 0
                pl
                1. 0
                  j4nk3y
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. -2
                        pl
                        1. 0
                          Matthias Apsel
                  2. 0
                    pl
              2. 0
                dedlfix
                1. 0
                  j4nk3y
                  1. 0
                    dedlfix
            2. 0
              j4nk3y
              1. 0
                dedlfix
      2. 0
        pl
  5. 0
    j4nk3y
    1. 0
      dedlfix
    2. 0
      j4nk3y
      1. 0
        j4nk3y
        1. 0
          pl
        2. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              dedlfix
              1. 0
                j4nk3y
          2. 0
            j4nk3y
            1. 0
              j4nk3y
  6. 0
    j4nk3y
    1. 0
      Der Martin
      1. 0
        j4nk3y
        1. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              Der Martin
              1. 0
                j4nk3y
        2. 0
          Der Martin
          1. 0
            j4nk3y
            1. 1
              Felix Riesterer
              1. 0
                j4nk3y
                1. 0
                  Matthias Apsel
                  1. 0
                    j4nk3y
                    • menschelei
                2. 0
                  Felix Riesterer
                  • php
                  • programmiertechnik
                  • sql
                  1. 0
                    j4nk3y
                    1. 0
                      Der Martin
                      1. 0
                        j4nk3y
                        1. 0
                          Der Martin
                          1. 0
                            j4nk3y
                            • menschelei
                    2. 0
                      Felix Riesterer
                      1. 0
                        pl
                      2. 0
                        j4nk3y
                        1. 2
                          dedlfix
                          1. 0
                            j4nk3y
                            1. 0
                              dedlfix
                              1. 0
                                Christian Kruse
                                1. 1
                                  dedlfix
                  2. 0
                    j4nk3y
                  3. 0
                    j4nk3y
                    1. 0
                      Felix Riesterer
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            pl
                            1. 0
                              j4nk3y
                          2. 0
                            dedlfix
                      2. 0
                        j4nk3y
                        1. 0
                          Der Martin
                        2. 0
                          Felix Riesterer
                          1. 0
                            Der Martin
                            1. 0
                              dedlfix
                          2. 0
                            j4nk3y
                            1. 1
                              Der Martin
                              1. 0
                                j4nk3y
    2. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            Christian Kruse
            1. 0
              j4nk3y
              1. 0
                Christian Kruse
              2. 0
                Matthias Apsel
                • zu diesem forum
                1. 0
                  j4nk3y