Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP PDO:Wie geht man mit bindValue() und reservierten Schlüsselwörtern um?

Wenn Sie die SQL-Zeichenfolge erstellen (prepare_update_string, glaube ich), sowie in den beiden foreach-Schleifen, in denen Sie Daten binden, führen Sie eine inkrementierende Zählung aus und hängen Sie sie an den Bindungswert an. Aus ":status" wird also ":status1".

Etwas wie:

$i = 1;
foreach ($data as $k => $v) {
    $this->_sth->bindValue(":{$k.$i}", $v);
    $i++;
}

Dadurch wird das Problem der reservierten Schlüsselwörter gelöst.

Es löst auch das Problem (dem Sie sicher in Zukunft begegnen werden), bei dem Sie mehr als einmal an denselben Platzhalter binden müssen.

z.B. anstelle des Folgenden, das einen Fehler aufgrund von zwei Bindungen auf den :status-Platzhalter

auslöst
SELECT * from table WHERE `status` = :status AND `otherfield` = :status

Mit einer aufsteigenden Zählung wird dies zu:

SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2

Viel Spaß.