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

PHP PDO:come gestire bindValue() e le parole chiave riservate?

Quando costruisci la stringa SQL (prepare_update_string credo), così come in entrambi i cicli foreach in cui leghi i dati, esegui un conteggio incrementale e aggiungilo al valore di binding. Quindi ":status" diventa ":status1".

Qualcosa come:

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

Questo risolverà il problema di eventuali parole chiave riservate.

Risolve anche il problema (che sono sicuro che incontrerai in futuro) per cui è necessario eseguire l'associazione allo stesso segnaposto più di una volta.

per esempio. invece del seguente, che genera un errore a causa di due binding sul segnaposto :status

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

Con un conteggio crescente, questo diventa:

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

Divertiti.