примеры - защита от sql инъекций php




В моем php-скрипте мое подключение к серверу работает, но мои запросы sql не (2)

Вы можете попробовать это. Поскольку вы используете mysqli_* я подготовил его к операторам и bind_param .

Примечание. Не проверено. Так что, возможно, придется немного подкорректировать.

$param = '$input';
$sql= $conn->prepare("SELECT * FROM book_table WHERE Title LIKE ? OR Author LIKE ? OR Barcode LIKE ?");
$sql->bind_param("s", $param);
$sql->execute();

if($res->num_rows > 0) {
   while ($row = $res->fetch()) {          
         echo "<br>Title: " . $row["Title"]. " - Author: " . $row["Author"];          
   }
} else { 
      echo " <br> 0 results"; 
}

Соединение работает, я не получаю ошибку подключения. Но когда я запускаю скрипт, я получаю неопределенную ошибку индекса и выводит «0 результатов», хотя моя таблица заполнена наверняка, и я ищу что-то, что я знаю, в таблице.

Я использую MySQL workbench для управления базой данных и apache (xampp) для размещения локального сервера и запуска скриптов PHP. Это может быть проблема? Есть ли способ разместить базу данных в том же месте, что и сайт apache?

$sql="SELECT * FROM book_table WHERE Title LIKE $input OR Author LIKE $input OR Barcode LIKE $input";
$result = $conn->query($sql);

if ($result) {

 while($row = $result->fetch_all()) {
     echo "<br>Title: " . $row["Title"]. " - Author: " . $row["Author"];
 }
} else {
 echo " <br> 0 results";
}

Мое предложение для вас - PDO :

$dsn = 'mysql:host=localhost;dbname='.$dbname;//$dbName is the name of your database
$user = 'root';
$pass = '123';//use your login information here
$db = new PDO($dsn, $user,$pass);
$query = "SELECT * FROM book_table WHERE Title LIKE :info OR Author LIKE :info OR Barcode LIKE :info";
$ps = $db->prepare($query);
$ps->bindValue(':info', $input)
$ps->execute();
$result = $ps->fetchAll(PDO::FETCH_ASSOC);

//iterate over result
if (!empty($results)){
    foreach ($result as $row) {
        echo "<br>Title: " . $row["Title"]. " - Author: " . $row["Author"];
    }
} else {
    echo " <br> 0 results";
}

Кроме того, не забудьте использовать MySQL LIKE правильно. Если вы хотите совместить часть строки, вам нужно использовать символ % .

Пример:

SELECT * FROM book_table WHERE Title LIKE "%goodbook%"

Он будет возвращать все строки, у которых есть «хорошая книга» как часть Title.





server