Felix Riesterer: Was will mir diese PDO-Meldung sagen? "SQLSTATE[HY000]: General error"

Beitrag lesen

Lieber dedlfix,

habe Deine Vorschläge jetzt so umgesetzt:

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();
  }
}

Es sollte auch nicht erwähnt bleiben, dass der Rückgabewert von rowCount nicht immer eine Zahl > 0 zurück gibt, vor allem dann, wenn beim UPDATE identische Werte zurückgeschrieben werden. Abhilfe schafft PDO::MYSQL_ATTR_FOUND_ROWS => true bei der Parameter-Übergabe im Konstruktor-Aufruf, den ich nun so geändert habe:

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);
  }
}

Nun klappt bisher alles so, wie ich mir das wünsche. Supi!

Liebe Grüße,

Felix Riesterer.