如何在查询中绑定参数数组和值

How to bind param an array and a value in a query

我有一个包含 n 个元素的数组,我想将它与 $genre 的值绑定。 这是我试过的: $genre = $_GET['a_gen'] ?? ''; $genre 来自先前的查询,它是一个字符串。 $aTitle 也是一个字符串数组。

<?php
                    if (isset($_POST['submit-search'])) {
                        $stmt = $conn -> prepare("SELECT a_titlu, a_autor, a_text, a_data, a_imagine, a_gen FROM articol WHERE a_titlu LIKE ? OR a_text LIKE ? 
                            OR a_autor LIKE ? OR a_data LIKE ?");
                        $search ='%'.$_POST['search'].'%';
                        $stmt -> bind_param('ssss', $search, $search, $search, $search);
                        $stmt -> execute();
                        $stmt -> store_result();
                        $stmt -> bind_result($a_titlu, $a_autor, $a_text, $a_data, $a_imagine, $a_gen);
                        $stmt -> get_result();
                        $count = $stmt -> num_rows();
                        $genre = $_GET['a_gen'] ?? '';
                        $aTitle = array();
                        if ($count > 0) {
                            if($count == 1)
                                echo "<h5 class='text-center toateArt'>Am găsit ".$count." rezultat!</h5>";
                            else
                                echo "<h5 class='text-center toateArt'>Am găsit ".$count." rezultate!</h5>";
                            while ($stmt -> fetch()) {
                                array_push($aTitle, $a_titlu);
                                echo "<div class='card'>
                                        <img src=".$a_imagine." class='imgRes' />
                                        <h3 class='articleTitle'>".$a_titlu."</h3>
                                        <h6 class='articleDT'><i class='fa fa-calendar'></i>".$a_data."&nbsp<i class='fa fa-user'></i>".$a_autor."</h6>
                                        <p class='articleDescription' style='text-align: justify;'>".$a_text."</p>
                                        <div class='button_cont' align='right'>
                                            <a class='buttonA' style='text-decoration: none;' href='article.php?title=".$a_titlu."&date=".$a_data."'>Citește</a>
                                        </div>
                                    </div>
                                <br>";
                            }
                        }
                    }
                ?>
                <?php
                    $in = str_repeat('?,', count($aTitle) - 1) . '?';
                    $aTitle[] = $genre;
                    $stmt = $conn -> prepare("SELECT  a_titlu, a_data, a_gen FROM articol WHERE a_titlu NOT IN ($in) AND a_gen = ?");
                    $types = str_repeat('s', count($aTitle));
                    $stmt -> bind_param($types, ...$aTitle);
                    $stmt -> execute();
                    $stmt -> store_result();
                    $stmt -> bind_result($a_titlu, $a_data, $a_gen);
                    $stmt -> get_result();
                    $count = $stmt -> num_rows();

                        while ($stmt -> fetch()) {
                            echo "<div class='card'><p>".$a_titlu."</p><p>".$a_data."</p><p>".$a_gen."</p></div><br>";
                        }
                ?>

由于在$aTitle上使用参数解包后不能再放入额外的参数,所以最简单的方法是在最后将其添加到数组中。

$in = str_repeat('?,', count($aTitle) - 1) . '?';
// Now add in value
$aTitle[] = $genre;
$stmt = $conn -> prepare("SELECT  a_titlu, a_data, a_gen 
                          FROM articol 
                          WHERE a_titlu NOT IN ($in) AND a_gen = ?");
$types = str_repeat('s', count($aTitle));
$stmt -> bind_param($types, ...$aTitle);