Visualizzazione risultati 1 fino 8 di 8

Discussione: Problema con PDO::MYSQL_ATTR_FOUND_ROWS

  1. #1
    mrbs non è connesso Neofita
    Data registrazione
    15-12-2023
    Messaggi
    5

    Predefinito Problema con PDO::MYSQL_ATTR_FOUND_ROWS

    Sembra che PDO::MYSQL_ATTR_FOUND_ROWS non funzioni sulla piattaforma Altervista PHP/MySQL. Il programma seguente dovrebbe emettere '1', ma restituisce '0'.

    Codice PHP:
    <?php

    error_reporting
    (-1);
    ini_set('display_errors', '1');

    $db_database = "your_database";
    $db_host = 'localhost';
    $db_login = "your_login";
    $db_password = "your_password";

    $dsn = "mysql:dbname=$db_database;host=$db_host";
    $table = "altervista_found_rows_test";

    $options = [PDO::MYSQL_ATTR_FOUND_ROWS => true];

    $dbh = new PDO($dsn, $db_login, $db_password, $options);

    $sql = "CREATE TABLE IF NOT EXISTS $table (id varchar(10), data int, PRIMARY KEY(id))";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();

    $sql = "INSERT IGNORE INTO $table (id, data) VALUES ('abcd', 1)";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();

    $sql = "UPDATE $table SET data=1 WHERE id='abcd'";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();

    echo
    $stmt->rowCount();

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,652

    Predefinito

    Dalla documentazione:

    PDO::MYSQL_ATTR_FOUND_ROWS (int)
    Return the number of found (matched) rows, not the number of changed rows.
    Nel tuo codice non vedo alcuna SELECT, quindi è corretto che non restituisca 1.
    Prova ad eseguire:

    Codice PHP:
    $sql = "SELECT * FROM $table WHERE id='abcd'";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();

    echo
    $stmt->rowCount();
    Dovrebbe stamparti 1 (o comunque il numero di righe trovate).

    Ciao!

  3. #3
    mrbs non è connesso Neofita
    Data registrazione
    15-12-2023
    Messaggi
    5

    Predefinito

    La documentazione di MySQL dice

    For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.

    L'opzione PDO PDO::MYSQL_ATTR_FOUND_ROWS dovrebbe impostare l'opzione MySQL CLIENT_FOUND_ROWS.

    Se eseguo il mio programma di test su qualsiasi altro sistema, restituisce "1". Ma su Altervista dà "0".

  4. #4
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,652

    Predefinito

    È stato individuato il problema, grazie!
    Con la prossima release di PHP8 e PHP8.2, verrà sistemato il problema.

    Ciao!

  5. #5
    mrbs non è connesso Neofita
    Data registrazione
    15-12-2023
    Messaggi
    5

    Predefinito

    Grazie. Quando sarà disponibile la prossima release di PHP su Altervista?

  6. #6
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,652

    Predefinito

    Purtroppo non so darti alcuna tempistica in merito.

    Ciao!

  7. #7
    mrbs non è connesso Neofita
    Data registrazione
    15-12-2023
    Messaggi
    5

    Predefinito

    Ok grazie. Potresti spiegare qual è il problema, per favore? Ho provato a eseguire il programma di test sulla stessa versione di PHP su altre piattaforme e funziona correttamente. Forse il problema è con la configurazione PHP?

  8. #8
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,652

    Predefinito

    Non so nello specifico il problema. Su AlterVista però PHP viene modificato per essere più sicuro ed ottimizzato, forse c'è stato qualche problema in queste fasi (però non saprei dirti).

    Ciao!

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •