Количество переменных не соответствует количеству параметров в подготовленном операторе в строке 10 - PullRequest
0 голосов
/ 06 августа 2020

Количество связываемых переменных не соответствует количеству полей в подготовленном операторе в строке 21

<?php
if($_POST['search'] && !empty($_POST['search']))
{
    $conn = mysqli_connect('localhost','root','','redo'); //Connection to my database
    $search = $_POST['search'];
    $search="%$search%";
    $query = "SELECT * FROM redo WHERE name LIKE '%$search%' OR gender LIKE '%$search%' OR age LIKE '%$search%'
              OR date LIKE '%$search%' OR contact LIKE '%$search%' OR code LIKE '%$search%'";
    $statement = $conn->prepare($query);
    $statement->bind_param('s',$search);
    $statement->execute();
    $statement->store_result();
    if($statement->num_rows() == 0) // so if we have 0 records acc. to keyword display no records found
    {
        echo '<div id="item">Ah snap...! No results found :/</div>';
        $statement->close();
        $conn->close();

    }
    else {
        $statement->bind_result($row['name']);
        while ($statement->fetch()) //outputs the records
        {
          ?>
            <div id="item"> <?php echo $row['name']; ?> </div>
            <?php
        };
        $statement->close();
        $conn->close();
    };
};

1 Ответ

2 голосов
/ 06 августа 2020

В вашем подготовленном запросе нет заполнителя, вы фактически используете подстановку строк и открыты для SQL инъекции

   $search = '%' . $search . '%';
   $query = "SELECT * FROM redo WHERE name LIKE ? OR gender LIKE ? OR age LIKE ?
                  OR date LIKE ? OR contact LIKE ? OR code LIKE ?";

   $statement = $conn->prepare($query);
   $statement->bind_param('ssssss', $search, $search, $search, $search, $search, $search);
   
   $statement->execute();

Вам также необходимо связать все столбцы с переменной в -> bind_result ( ), поскольку вы используете select * from redo

$statement->bind_result($row['col_1'], $row['col_2'], ...);

Если вам нужен только столбец name, измените его на select name from redo ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...