Bonjour à tous,
Aprés scrapper des données je souhaite les inserer dans ma bdd. Du coup je récupère tout une ligne de donné qui contient mes 9 champs de ma table. Lors que j'execute le code j'ai une erreur : Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe prs de ''.Array.''
Voici mon code
function table_but_exact($lien_exact)
{
foreach ($lien_exact as $lien2) {
$html = new simple_html_dom();
$html->load_file($lien2);
$csv = [];
$tr = $html->find('#btable', 0);
foreach ($tr->find('tr') as $item) {
$td = $item->find("td");
$temp = [];
for ($i = 0; $i < sizeof($td); $i++) {
if ($i <> 2) {
$text = $td[$i]->text();
$text = trim($text);
$text = str_replace(",", "", $text);
$text = str_replace("%", "", $text);
$text = str_replace(" ", "", $text);
$text = str_replace('(', "", $text);
$text = str_replace(')', "", $text);
array_push($temp, $text);
}
}
if (sizeof($td) > 8) {
$csv[] = $temp;
}
}
$pdo = new PDO('mysql:host=localhost;dbname=resultat_stats', 'root', '');
foreach ($csv as $data) {
$ajouter = "INSERT INTO but_exact VALUE '.$data.'";
$preparedajouter = $pdo->prepare($ajouter);
$preparedajouter->execute();
}
}
}
Je ne sais pas si j'en suis loins. Si vous pouvez m'aider j'en serai ravi.
Merci d'avance, bonne soirée.
Sa y est j'ai réussi en faisant ça :
for ($u = 0; $u < count($csv); $u++){
$tableau = array(
"Equipe" => $csv[$u][0],
"GP" => $csv[$u][1],
"AVG" => $csv[$u][2],
"0_but" => $csv[$u][3],
"1_but" => $csv[$u][4],
"2_but" => $csv[$u][5],
"3_but" => $csv[$u][6],
"4_but" => $csv[$u][7],
"5_but" => $csv[$u][8]
);
$pdo = new PDO('mysql:host=localhost;dbname=resultat_stats', 'root', '');
$query = 'INSERT INTO but_exact (Equipe, GP, AVG, 0_but, 1_but, 2_but, 3_but, 4_but, 5_but) VALUES (:Equipe, :GP, :AVG, :0_but, :1_but, :2_but, :3_but, :4_but, :5_but)';
$insert = $pdo->prepare($query);
$insert->execute($tableau);
}
Bonsoir,
J'ai essayé ça mais ça ne fonctionne pas non plus :
$pdo = new PDO('mysql:host=localhost;dbname=resultat_stats', 'root', '');
$rqt = "INSERT INTO but_exact ('Equipe', 'GP', 'AVG', '0_but', '1_but', '2_but', '3_but', '4_but', '5_but')";
$rqt = " VALUES ";
$rqt = "$csv[0] , $csv[1], $csv[2], $csv[3], $csv[4], $csv[5], $csv[6], $csv[7], $csv[8]";
$stmt = $pdo->prepare($rqt);
foreach ($csv as $ligne) {
//parcours des lignes
foreach ($ligne as $key => $value) {
if ($key == 'Equipe') {
$stmt->bindParam('Equipe', $value);
}
if ($key == 'GP') {
$stmt->bindParam('GP', $value);
}
if ($key == 'AVG') {
$stmt->bindParam('AVG', $value);
}
if ($key == '0_but') {
$stmt->bindParam('0_but', $value);
}
if ($key == '1_but') {
$stmt->bindParam('1_but', $value);
}
if ($key == '2_but') {
$stmt->bindParam('2_but', $value);
}
if ($key == '3_but') {
$stmt->bindParam('3_but', $value);
}
if ($key == '4_but') {
$stmt->bindParam('4_but', $value);
}
if ($key == '5_but') {
$stmt->bindParam('5_but', $value);
}
$stmt->execute();
} //fin foreach ligne
} //fin foreach tableau*/
Bonsoir,
Fait un echo de $rqt juste avant le prepare, tu vas voir ta 1ère erreur
ensuite, il manque les marqueurs dans la requete. (cf la doc de la méthode prepare)
Bonsoir,
Si je fait un echo de $rqt avant le prepare ça me met : Array , Array, Array, Array, Array, Array, Array, Array, Array
Et j'ai regardé les marqueurs de la méthode prepare et je vois pas !!
donc $svc[0] est un array et non un string
tu ne les vois les marqueurs pas car il n'y en a pas
$rqt avant le prepare devrait contenir la requête complète et non seulement la ligne précédende. Car tu ne fais pas de concaténation mais écrase chaque ligne.
Si je fais un var_dump($csv[0]) j'ai un array avec toute la ligne de donnée mais si je fais var_dump($csv[0][0]) là j'ai bien un string avec juste la donnée
Bonsoir,
Je suis toujours en recherche de solution. Si quelqu'un à une idée de solution je suis toujours preneur !!
Bonne soirée
$pdo = new PDO('mysql:host=localhost;dbname=resultat_stats', 'root', '');
$rqt = "INSERT INTO but_exact ('Equipe', 'GP', 'AVG', '0_but', '1_but', '2_but', '3_but', '4_but', '5_but')";
$rqt = " VALUES ";
$rqt = "$csv[0][?], $csv[0][?], $csv[0][?], $csv[0][?], $csv[0][?], $csv[0][?], $csv[0][?], $csv[0][?], $csv[0][?]";
// echo $rqt;
$stmt = $pdo->prepare($rqt, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
foreach ($csv as $ligne) {
//parcours des lignes
foreach ($ligne as $key => $value) {
if ($key == 'Equipe') {
$stmt->bindParam('Equipe', $value);
}
if ($key == 'GP') {
$stmt->bindParam('GP', $value);
}
if ($key == 'AVG') {
$stmt->bindParam('AVG', $value);
}
if ($key == '0_but') {
$stmt->bindParam('0_but', $value);
}
if ($key == '1_but') {
$stmt->bindParam('1_but', $value);
}
if ($key == '2_but') {
$stmt->bindParam('2_but', $value);
}
if ($key == '3_but') {
$stmt->bindParam('3_but', $value);
}
if ($key == '4_but') {
$stmt->bindParam('4_but', $value);
}
if ($key == '5_but') {
$stmt->bindParam('5_but', $value);
}
$stmt->execute(array());
} //fin foreach ligne
} //fin foreach tableau*/
et tu n'as toujours pas vu que le écho de ta requête n'affiche pas cette dernière en entier ?
tu as été lire la doc de la méthode prepare ?
Oui je suis allé lire la doc, je suis dessus (https://www.php.net/manual/fr/pdo.prepare.php)
tu ne réponds pas à ma 1ère question
et donc tu retrouves dans la doc, ce que tu as dans ton code avec les marqueurs ?
Bon tant pis j'arrive pas, peu être c'est pas possible comme ça ! je vais chercher autrement !! Merci de ton temps !!
si c'est possible, tu fais juste des erreurs.
Je ne donne pas la solution, mais t'indique des méthodes pour trouver les erreurs. Ceci afin de t'aider à progresser
Bon je vais essayer de ne pas me décourager.
"et tu n'as toujours pas vu que le écho de ta requête n'affiche pas cette dernière en entier ?"
Si je fais un echo sur $rqt, j'ai les marqueurs qui s'affiche (?).
Est ce que dans un premier temps, c'est normal que ça m'affiche ça ? Sur la doc ça met ça "$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");"
Si je met que des ? cela m'affiche aussi des ?
Je début et c'est un peu poussé pour moi !!
comme tu ne fais pas de concaténation, tu écrases à chaque fois ce que tu écris dans $rqt
du coup ta requête n'est pas complète. il te manque le début.
Bonjour,
j'ai du mal avec le mot concaténation. Est ce que ça veux dire mettre dans une variable ? comme ci-dessous
$equipe = $csv[0][0];
$GP = $csv[0][1];
$AVG = $csv[0][2];
...
non, cela veut dire assembler.
je t'invite a revoir les bases du php.
$var = "je suis un chaine";
$var .= ", avec un autre bout de chaine";
et tu peux même améliorer en sortant les 3 lignes avant le "execute" de la boucle for
car le but d'une requête est aussi de ne pas la préparer à chaque fois. et tu n'auras qu'une instance de pdo et non autant de ligne que dans ton fichier
for ($u = 0; $u < count($csv); $u++){
$tableau = array(
"equipe" => $csv[$u][0],
"gp_ht_a" => $csv[$u][1],
"avg_ht_a" => $csv[$u][2],
"0_5_ht_a" => $csv[$u][3],
"1_5_ht_a" => $csv[$u][4],
"2_5_ht_a" => $csv[$u][5],
"3_5_ht_a" => $csv[$u][6],
"4_5_ht_a" => $csv[$u][7],
"5_5_ht_a" => $csv[$u][8],
"bts_ht_a" => $csv[$u][9],
"cs_ht_a" => $csv[$u][10],
"fts_ht_a" => $csv[$u][11],
"wtn_ht_a" => $csv[$u][12],
"ltn_ht_a" => $csv[$u][13]
);
$pdo = new PDO('mysql:host=localhost;dbname=resultat_stats', 'root', '');
$query = 'INSERT INTO total_but_ht_a (equipe, gp_ht_a, avg_ht_a, 0_5_ht_a, 1_5_ht_a, 2_5_ht_a, 3_5_ht_a, 4_5_ht_a, 5_5_ht_a, bts_ht_a, cs_ht_a, fts_ht_a, wtn_ht_a, ltn_ht_a) VALUES (:equipe, :gp_ht_a, :avg_ht_a, :0_5_ht_a, :1_5_ht_a, :2_5_ht_a, :3_5_ht_a, :4_5_ht_a, :5_5_ht_a, :bts_ht_a, :cs_ht_a, :fts_ht_a, :wtn_ht_a, :ltn_ht_a)';
$insert = $pdo->prepare($query);
$insert->execute($tableau);
}
Et si je ferme mon for avant $pdo j'ai juste la derniere ligne dans ma bdd.
ce n'est pas ce que j'ai dit.
sortir avant le for seuleme les 3 lignes qui précéde le "execute"