sql >> Database teknologi >  >> RDS >> Mysql

Udfør PDO med et array, der indeholder nulværdier

Overvej venligst at bruge bindValue i stedet for at sende det array, der skal udføres. Som der står her :

Det burde være muligt at gøre dette ret gennemsigtigt for resten af ​​din applikation, da du allerede har de værdier, du ønsker at OPDATERE, som et array. Prøv f.eks. noget som dette:

<?php
function executeWithDataTypes(PDOStatement $sth, array $values) {
    $count = 1;
    foreach($values as $value) {
        $sth->bindValue($count, $values['value'], $values['type']);
        $count++;
    }

    return $sth->execute();
}

$sth = $handle->prepare("UPDATE table SET name = ?, id_extra1 = ?, id_extra2 = ? WHERE id_something = ?");

$values = array();
$values[] = array('value' => 'testing', 'type' => PDO::PARAM_STR);
$values[] = array('value' => 2, 'type' => PDO::PARAM_INT);
$values[] = array('value' => null, 'type' => PDO::PARAM_NULL);
$values[] = array('value' => 1958, 'type' => PDO::PARAM_INT);

$result = executeWithDataTypes($sth, $values);
?>

Da du bemærkede, at brugen af ​​bindParam gav dig hovedpine tidligere, skal du være opmærksom på den subtile forskel mellem bindValue og bindParam . Personligt bruger jeg aldrig bindParam på grund af bivirkninger, som gør det sværere at forstå scripts, selvom der selvfølgelig er tilfælde, hvor disse effekter vil være nyttige.

EDIT:Du kan selvfølgelig forenkle funktionen endnu mere og slippe for behovet for at angive typen som ekstra nøgle i det beståede array ved at gøre noget som:

$type = PDO::PARAM_STR;
switch(true) {
    case is_null($value): $type = PDO::PARAM_NULL; break;
    case is_numeric($value): $type = PDO::PARAM_INT; break;
    // ...
    default: break;
}

og bestemme typen baseret på typen af ​​den værdi, der sendes i arrayet; det er dog mere fejlbehæftet, da f.eks. flydere er også numeriske, og det ville føre til en forkert beslutning i ovenstående switch-sætning, men jeg tænkte, at jeg ville nævne det for fuldstændighedens skyld.



  1. 4 måder at konvertere et tal til en procentdel i SQL Server (T-SQL)

  2. Understøttelse af MariaDB 10.4 i opgraderet dbForge Studio til MySQL, v.8.1

  3. Sådan viser eller viser værktøjslinjen Hurtig adgang i Word, Excel og PowerPoint

  4. MySQL Tutorial – Forstå sekunderne bag Master Value