Problem vo mysqli zu pdo

Loddar1

Erfahrenes Mitglied
einen schönen Sonntag alle,
wie ich schon mitteilte möchte ich von mysqli zu pdo umschreiben geht soweit auch ganz gut nur beim onlinecounter habe ich ein problem:
mit mysqli funktioniert dieses:
PHP:
$ip = $_SERVER['REMOTE_ADDR'];

$stmt = $con->prepare("SELECT * FROM online WHERE DATE_FORMAT(onl_dt, '%d') = DATE_FORMAT(NOW(), '%d') AND onl_ip = '$ip'");
$stmt->execute();
$result = $stmt->get_result();
$anzahlip = $result->num_rows;
   if($anzahlip > 0){
   $row = $result->fetch_array();
       if ($row['onl_exp'] == 1){
       $stmt = $con->prepare("UPDATE online set onl_exp = '0', onl_dt = NOW() WHERE DATE_FORMAT(onl_dt, '%d') = DATE_FORMAT(NOW(), '%d') AND onl_ip = '$ip';");
       $stmt->execute();
       }
   }

mit pdo funktioniert es so:
PHP:
$ip = $_SERVER['REMOTE_ADDR'];

$state = $con->prepare("SELECT * FROM online WHERE DATE_FORMAT(onl_dt, '%d') = DATE_FORMAT(NOW(), '%d') AND onl_ip = '$ip'");
$state->execute();
$anzahlip = $state->rowCount();
   if($anzahlip > 0){
   $rowr = $state->rowCount();    // Ich neme an das dass rowCount() falsch ist, aber wie ist es richtig?
   if ($rowr['onl_exp'] == 1){    // Warning: Trying to access array offset on value of type int in dieser Zeile
        $stmt = $con->prepare("UPDATE online set onl_exp = '0', onl_dt = NOW() WHERE DATE_FORMAT(onl_dt, '%d') = DATE_FORMAT(NOW(), '%d') AND onl_ip = '$ip';");
        $stmt->execute();
        }
   }

nicht.
Kann mir einer von euch sagen wie es richtig wäre?
Das * vergessen wir erstmal, es geht hier nur um die funktion.

Danke im vorraus Loddar1
 

m.scatello

Erfahrenes Mitglied
Aus der Doku:
PDOStatement::rowCount() returns the number of rows affected by a DELETE, INSERT, or UPDATE statement.

For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of matching rows.
 

Loddar1

Erfahrenes Mitglied
Die Doku schreibt,
PHP:
$state = $con->prepare("SELECT count(*) FROM online WHERE DATE_FORMAT(onl_dt, '%d') = DATE_FORMAT(NOW(), '%d') AND onl_ip = '$ip'");
$state->execute();
$anzahlip = $state->fetchColumn();
aber da steht nicht, was in diese
PHP:
$rowr = $state->rowCount();    // Ich neme an das dass rowCount() falsch ist, aber wie ist es richtig?
Zeile kommt, ich bin noch am lernen und finde keine Lösung wie ich das von mysqli zu pdo umschreiben kann.
Denn nur mit dem oberen teilstück funktioniert es nicht!
 

Yaslaw

alter Rempler
Moderator
In der Doku steht etwas. Du machst etwas anderes und fragst warum es nicht funktioniert. Glaubst du der Doku nicht?
Da steht doch. Mach ein SELECT COUNT und ruf dessen Resultat ab.
 

m.scatello

Erfahrenes Mitglied
$state = $con->prepare("SELECT * FROM online WHERE DATE_FORMAT(onl_dt, '%d') = DATE_FORMAT(NOW(), '%d') AND onl_ip = '$ip'");
PDOStatement::rowCount() returns the number of rows affected by a DELETE, INSERT, or UPDATE statement.
Jetzt mal ehrlich!!!! Denkst du überhaupt mit und versuchst zu verstehen, was da steht??? Ich habe nicht diesen Eindruck!

Falls das mit Englisch nicht so klappt:
PDOStatement::rowCount() gibt die Anzahl der von einer DELETE-, INSERT- oder UPDATE-Anweisung betroffenen Zeilen zurück.
Steht da was von Select??? :mad:
Beispiel #2 Zählen von Zeilen, die von einer SELECT-Anweisung zurückgegeben werden
Ich bin hier raus, das wird mir dann doch zu blöde!