0
votes

Est-il possible d'optimiser une grande quantité de bindvalue dans AOP au moyen de boucles?

J'ai un site web avec sudoku. Les utilisateurs peuvent sauver leur Sudoku pour finir plus tard. Je voudrais optimiser ou raccourcir mon code. A1, A2, A3 ... [...] Sont le "nom" des champs individuels de Sudoku. J'utilise une bibliothèque PDO.

Ceci est le code PHP qui enregistre tous les champs Sudoku à la base de données: xxx

puis-je raccourcir ce code en quelque sorte à l'aide de boucles? Toute suggestion?

et comment le faire?


3 commentaires

Oui bien sûr vous pourriez


Mais bien sûr, une telle structure de table crie de la conception inappropriée de la base de données. Envisagez de normaliser votre base de données.


@Votre sens commun Pourquoi pensez-vous que ma table est incorrecte? J'ai une table "Rozw" avec des cellules A1, A2, A3 ... qui correspondent à chaque champ de Sudoku. Comment dois-je le reconstruire?


3 Réponses :


2
votes

Cela devrait faire ce que vous voulez

$query->bindValue(':user_id', $_SESSION['user_id'], PDO::PARAM_INT);
$query->bindValue(':id_wynik', $_POST['id_wynik'], PDO::PARAM_INT);

$alpha = ['a','b','c','d','e','f','g','h','i'];
$max = 9;

foreach ($alpha as $a){
    for ($n=1; $n<=$max; $n++) {
        $query->bindValue(":$a$n", $_POST[$a$n], PDO::PARAM_INT);
    }
}


3 commentaires

Vous êtes en effet un maître de bête.


@Funkfortyniner et vous êtes, je crois, prenant le Michael Mon Ami mais c'est toujours agréable d'avoir de vos nouvelles :)


Votre code génère une erreur. J'ai changé $ _Post ['$ a $ n] à $ _post [' '. $ A.' '. $ N.' '] Et travaille maintenant bien. Merci!



2
votes

Vous pouvez transmettre un tableau associatif en tant que paramètre sur la méthode exécuter : xxx


2 commentaires

Mais les valeurs sont traitées comme des chaînes que je crois et non des entiers


@Riggsfolly Vous êtes correct. Bien que cela fonctionne, les valeurs seront traitées comme des chaînes et MySQL devra la convertir en Int. Comme ce n'est pas trop de valeurs, l'impact sur la performance sera probablement négligeable, mais votre réponse est meilleure



2
votes
$colNames = '';
$colValus = '';
$charArray = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');
foreach($charArray as $key => $char)
{
    for($i=1; $i<=9; $i++)  
    {
        $colNames  .= ',' . $char . $i; 
        $colValues .= ':' . $char . $i;    
    }
}
$sqlQuery = 'INSERT INTO rozw (user_id, id_wynik, ' . $colNames . ' VALUES (:user_id, :id_wynik, ' . $colValues . '))';
$query->bindValue(':user_id', $_SESSION['user_id'], PDO::PARAM_INT);
$query->bindValue(':id_wynik', $_POST['id_wynik'], PDO::PARAM_INT);
foreach($charArray as $key => $char)
{
    for($i=1; $i<=9; $i++)  
    {
        $colVal  = ':' . $char . $i;
        $postVal = $char . $i;
        $query->bindValue($colVal , $_POST[$postVal], PDO::PARAM_INT);
    }
}

$query->execute();

0 commentaires