Ошибка подготовленного оператора SQL в моей форме поиска - PullRequest
0 голосов
/ 27 февраля 2019

Мне трудно написать подготовленный оператор SQL для формы поиска, могу ли я получить помощь по ее исправлению?Все прекрасно работает без подготовленного SQL-оператора bind, но я уверен, что он не так безопасен.

Вот мой КОД:

<?php
  // Define Database connection parameters 
  $dbserver = "localhost";
  $username = "root";
  $password = "";
  $dbname = "student";
  // Lets Connect to theDatabase Table, But if there is an Error lets tell before its too late to figured
  $conn = mysqli_connect ( $dbserver, $username, $password, $dbname ) or die ( ' I can not connect to the database ' );

   // Its time to Capture the varibles and user inpute from the form , also we need to sanitize the input to avoid SQL Injection    
  $study_group = mysqli_real_escape_string ( $conn, $_POST['matric_number']);

  /* Lets try to use bind Statement to reduce further hacking

  I am also avoiding using "LIKE" Clause because IVariable direct Exact results so will be using the Direct Varible 
  */

  $sql = $conn->prepare (" SELECT * FROM study_circle WHERE matric = ? ") ;
  $sql->bind_param('s', $study_group);
  $sql ->execute();

  $results = mysqli_query ($conn, $sql);
  $mysqlResults = mysqli_num_rows ($results);

  if (  $mysqlResults > 0   )
  { 
    while (  $row = mysqli_fetch_assoc ( $results )) 
    {
      // Display results in table form
      echo " <div>
        <h4> ".$row['full_name']."</h4>
      </div>";
     }      
  } else {
    echo " Please Ensure your Matric Number is correct, We can not find anything relting to your data";
  }

1 Ответ

0 голосов
/ 27 февраля 2019

если вы используете подготовленный оператор, вы не должны использовать mysqli_real_escape_string

Попробуйте прокомментировать строку mysqli_real_escape_string и используйте $ _POST ['matric_number'] непосредственно в bind_param

// $study_group = mysqli_real_escape_string ( $conn, $_POST['matric_number']);

/* Lets try to use bind Statement to reduce further hacking

Я также избегаю использованияПредложение "LIKE", потому что IVariable direct Точные результаты, поэтому будет использоваться переменная Direct * /

$sql = $conn->prepare (" SELECT * FROM study_circle WHERE matric = ? ") ;
$sql->bind_param('s',  $_POST['matric_number']);
$sql ->execute();

Параметр привязки и подготовленный оператор предотвращают внедрение SQL, поэтому вам не нужна операция mysqli_real_escape_string

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