Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP PDO:Como lidar com bindValue() e palavras-chave reservadas?


Quando você constrói a string SQL (prepare_update_string, eu acho), bem como nos dois loops foreach onde você vincula os dados, execute uma contagem de incremento e anexe-a ao valor de vinculação. Então ":status" se torna ":status1".

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

Isso resolverá o problema de quaisquer palavras-chave reservadas.

Ele também resolve o problema (que tenho certeza que você encontrará no futuro) em que você precisa vincular ao mesmo espaço reservado mais de uma vez.

por exemplo. em vez do seguinte, que gera um erro devido a dois vínculos no espaço reservado :status
SELECT * from table WHERE `status` = :status AND `otherfield` = :status

Com uma contagem incrementada, isso se torna:
SELECT * from table WHERE `status` = :status1 AND `otherfield` = :status2

Apreciar.