Function implode ne fonctionne pas

Résolu
Bonsoir, mes frères s'ils vous plais j'ai besoin d'aide, y a une partie de mon code qui refusent de s'exécuter, voici l'erreur qui s'affiche quand je essaye de l'exécuter
Warning: PDOStatement syntaxe erreur prés de la ligne 2, wamp/localhost/db.class.php on line 29


Le code de la connexion à la base de données
<?php
    class DB{
        private $host = "localhost";
        private $username = "root";
        private $password = "";
        private $database = "projet";
        private $db;

        public function __construct($host = null, $username = null, $password = null, $database = null){
            
            if($host != null){
                $this->host = $host;
                $this->username = $username;
                $this->password = $password;
                $this->database = $database; 
            }
            try{
            $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
                PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
                PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
                ));
            }catch(PDOException $e){ 
                die('Impossible de se connecter à la base de donnée');
            }   
            
        }
        public function query($sql, $data = array()){
                $req =$this->db->prepare($sql);
                $req->execute($data);
                return $req->fetchAll(PDO::FETCH_OBJ);
        }
    }
?>


Voici la page execution dans la quel se trouve la function implode
<?php 
require_once "demarrage.php";
require "_header.php";
?>
<!DOCTYPE HTML>
<html>
	<head>
		<title>projet</title>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
		<meta name="Robots" content="all"/>
		<meta name="description" content="produit" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta name="viewport" content="width=device-width, maximum-scale=1"/>
		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
		<script type="text/javascript" language="javascript" src="jsp/behavior.js"></script>
		<script type="text/javascript" language="javascript" src="jsp/rating.js"></script>
		<link rel="stylesheet" type="text/css" href="css/rating.css" />
		<link rel="stylesheet" href="assets/css/main.css" />
		<link rel="stylesheet" href="assets/css/caption.css" />
		<link rel='stylesheet' href='css/jquery-ui-1.8.22.custom.css' />
		<link rel="icon" type="image/png" href="logo/logo_.png">	
		<link rel='stylesheet' href='jquery-ui-1.8.22.custom.css' />
		<script type='text/javascript' src='jquery-1.7.2.min.js'></script>
		<script type='text/javascript' src='jquery-ui-1.8.22.custom.min.js'></script>
	
</head>

	<body class="single is-preload">

		<!-- Wrapper -->
			<div id="wrapper">

				<!-- Header -->
				<?php require_once "menu/header.php" ?>				

				<!-- Main -->
					<div id="main">
						
							<h3>Table</h3>
									<h4>Default</h4>
									<div class="table-wrapper">
										<table>
											<thead>
												<tr>
													<th>Nom</th>
													<th>Description</th>
													<th>Prix</th>
												</tr>
											</thead>
											<?php
											$ids = array_keys($_SESSION['paniex']);
											var_dump($ids);
											/*unset($_SESSION);*/
					$products = $DB->query('SELECT * FROM products WHERE id IN ('.implode(" ", $ids).') ');
											var_dump($products);
											foreach($products as $product):
											?>
											<tbody>
												<tr>
													<td>Item01 One</td>
													<td>Ante turpis integer.</td>
													<td>29.99</td>
												</tr>
												<?php endforeach; ?>
											</tbody>
											<tfoot>
												<tr>
													<td colspan="2"></td>
													<td>100.00</td>
												</tr>
											</tfoot>
										</table>
									</div>


					</div>
	
				<!-- Footer -->
				<?php require_once "menu/footer.php" ?>

			</div>

		<!-- Scripts -->
			<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
			<script src="js/jssor.slider-27.5.0.min.js" type="text/javascript"></script>

    		<script type="text/javascript">
       		jQuery(document).ready(function ($) {

            var jssor_options = {
              $AutoPlay: 1,
              $SlideWidth:1100,
              $ArrowNavigatorOptions: {
                $Class: $JssorArrowNavigator$
              },
              $BulletNavigatorOptions: {
                $Class: $JssorBulletNavigator$
              }
            };

            var jssor_slider = new $JssorSlider$("jssor", jssor_options);

            /*#region responsive code begin*/

            var MAX_WIDTH = 1100;

            function ScaleSlider() {
                var containerElement = jssor_slider.$Elmt.parentNode;
                var containerWidth = containerElement.clientWidth;

                if (containerWidth) {

                    var expectedWidth = Math.min(MAX_WIDTH || containerWidth, containerWidth);

                    jssor_slider.$ScaleWidth(expectedWidth);
                }
                else {
                    window.setTimeout(ScaleSlider, 30);
                }
            }

            ScaleSlider();

            $(window).bind("load", ScaleSlider);
            $(window).bind("resize", ScaleSlider);
            $(window).bind("orientationchange", ScaleSlider);
            /*#endregion responsive code end*/
        });


    </script>
		    
			<script src="jss/slides.js"></script>
			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/browser.min.js"></script>
			<script src="assets/js/breakpoints.min.js"></script>
			<script src="assets/js/util.js"></script>
			<script src="assets/js/main.js"></script>


	</body>
</html>


Merci pour la compréhension

Configuration: Android / Chrome 77.0.3865.92

2 réponses

  1. Modérateur
    Bonjour,

    Aucun rapport avec ta fonction implode ...
    Si tu relis bien le message il te parle de ton fichier de connexion à la bdd... à la ligne 2

    Il serait bien de nous montrer le code COMPLET de ton fichier

    NB: Les balises de code du forum étant actuellement buguées..., exceptionnelement, une capture écran serait plus adaptée.
    Merci.

  2. Modérateur
    Le fichier DB .... pas les autres...

    Le message d'erreur t'indique clairement une erreur à la ligne 29 du fichie db
    db.class.php on line 29

    Visiblement.. une parenthèse en trop je suppose...
    1. Comment ça une parenthèse je comprend pas ?
    2. Modérateur
      @mobrobotOublie la parenthèse.
      C'est du aux balises de code...

      Par contre, as tu essayé de voir ce que te retourne exactement cette requête ?
      SELECT * FROM products WHERE id IN ('.implode(" ", $ids).') '
      

      Si tu en fais un echo... et que tu la testes ensuite directement dans ta bdd... ça marche ?

      Sachant que lorsque tu utilises un "IN".. il faut séparer les valeurs par des virgules...
      $sql = "SELECT * FROM products WHERE id IN ('".implode("','", $ids)."') '";
      


      Et au passage ...
      N'oublie pas de mettre également l'exécution de tes requêtes dans des blocs TRY/CATCH
      comme ici :
      https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
    3. Ok je vais vérifier et voir
    4. Je penses je vue le problème la session n'est pas récupéré dans la page