07-04-2016, 09:28 AM
Actuellement, si j'ai bien suivi, ta boucle faire 3 tours, et prépare une requête INSERT ou UPDATE à chaque tour.
Donc préparer les 2 requêtes et les exécuter dans la boucle sera forcément plus véloce (dans le 1er cas, tu prépare toujours 3 trucs, dans le second, toujours 2, même s'il l'un des deux est inutile).
Si tu ne veux pas préparer une des deux requêtes inutilement, tu peux les proxifier (c'est là où l'OO devient intéressant).
Le principe étant alors d'instancier 2 objets (proxies) auxquels tu demandera la requête préparée, et qui ne la prépareront qu'une seule fois. Si la requête ne leur est jamais demandée, il ne la prépareront jamais.
Note que c'est une classe parfaitement réutilisable sur n'importe quelle requête à potentiellement préparer.
Donc préparer les 2 requêtes et les exécuter dans la boucle sera forcément plus véloce (dans le 1er cas, tu prépare toujours 3 trucs, dans le second, toujours 2, même s'il l'un des deux est inutile).
Si tu ne veux pas préparer une des deux requêtes inutilement, tu peux les proxifier (c'est là où l'OO devient intéressant).
class ProxyPrepare {
function __construct($pdo, $query) {
$this->query = $query;
$this->pdo = $pdo;
$this->prepared = null;
}
function getPrepared() {
if (!$this->prepared) {
$this->prepared = $this->pdo->prepare($this->query);
}
return $this->prepared;
}
}
//Usage
$update = new ProxyPrepare($myPdo, 'UPDATE... ? ...');
$insert = new ProxyPrepare($myPdo, 'INSERT... ? ...');
for (/*...*/) {
//...
if (/*...*/) {
$update->getPrepared()->exec(/*...*/);
}
else {
$insert->getPrepared()->exec(/*...*/);
}
}
Le principe étant alors d'instancier 2 objets (proxies) auxquels tu demandera la requête préparée, et qui ne la prépareront qu'une seule fois. Si la requête ne leur est jamais demandée, il ne la prépareront jamais.
Note que c'est une classe parfaitement réutilisable sur n'importe quelle requête à potentiellement préparer.