php / php/php-src

FETCH_LAZY not properly supported for "long" columns

Offen
#9,828 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Extension: pdo_odbc Status: Needs Triage
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

<?php
const SIZE = 300;
$pdo = new PDO(DSN, USER, PASS);
$pdo->exec("CREATE TABLE gh9498 (name VARCHAR(" . SIZE . "))");
$pdo->exec("INSERT INTO gh9498 VALUES ('" . str_repeat("a", SIZE) . "')");
$statement = $pdo->prepare("SELECT * FROM gh9498");
$statement->execute();
$row = $statement->fetch(PDO::FETCH_LAZY);
var_dump($row);
var_dump($row);

Resulted in this output:

object(PDORow)#3 (2) {
  ["queryString"]=>
  string(20) "SELECT * FROM gh9498"
  ["name"]=>
  string(300) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
object(PDORow)#3 (2) {
  ["queryString"]=>
  string(20) "SELECT * FROM gh9498"
  ["name"]=>
  NULL
}

But I expected this output instead:

object(PDORow)#3 (2) {
  ["queryString"]=>
  string(20) "SELECT * FROM gh9498"
  ["name"]=>
  string(300) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
object(PDORow)#3 (2) {
  ["queryString"]=>
  string(20) "SELECT * FROM gh9498"
  ["name"]=>
  string(300) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}

Obviously, accessing the row for the first time works as expected, but accessing it another time, does not. If SIZE < 256, accessing the row multiple times is properly supported.

PHP Version

PHP-8.0

Operating System

any

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Beispiel mit PDO::FETCH_LAZY und einem Wert mit mehr als 256 Zeichen und verfolge dann den PDO-Fetch-Pfad bei wiederholtem Zeilenzugriff. Füge einen Regressionstest hinzu, der das gemeldete Verhalten abdeckt; abgeschlossen ist die Aufgabe, wenn die lange Spalte beim zweiten Zugriff weiterhin verfügbar ist und der erwarteten Ausgabe entspricht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, php
Bereich
database
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.