2014-12-01 4 views
0

Я занимался некоторыми исследованиями в mysqli_real_escape_string(), но я не совсем понимаю, как правильно использовать его в моем случае, чтобы помочь защитить от SQLInjection, используя мой код ниже, может кто-нибудь мне помочь исправить это? Я ценю всю помощь. Другие вопросы, касающиеся здесь reguarding инъекции SQL и PHP не реально ответить на мой вопрос reguarding правильного использования синтаксиса в моем формате, когда я использовал это:Проблема с синтаксисом mysql_real_escape_string()

"$city = mysqli_real_escape_string($_POST['City']); 

Я получил только мой общий поиск независимо от того, что ввод " % $% город»или '% $% бизнеса'

<?php 
    $con = mysqli_connect(........); 
    // Check connection 
    if (mysqli_connect_errno()) 
     { 
     echo "<option>Failed to connect to the Database</option>" ; 
     } 


    $city = mysqli_real_escape_string($con, $_POST['City']); 
    $business = mysqli_real_escape_string($con, $_POST['Business']); 

    $result = mysqli_query($con,"SELECT * FROM Business WHERE City LIKE '%$city%' AND BName LIKE '%$business%' ORDER BY City, BName ASC"); 
    while($row = mysqli_fetch_array($result)) 
    { 
    // do stuff here 
    } 

    // No other results 
    echo "<center>No other listings like $city or $business</center>"; 

    // Free result set 
    mysqli_free_result($result); 
    mysqli_close($con); 
?> 
+2

Забудьте о mysql_real_escape_string() 'и устаревшем расширении mysql - он заброшен и небезопасен. Если вы используете новое расширение mysqli, используйте его все время (среди других причин, потому что вы не можете смешивать два разных расширения базы данных). Подготовленные заявления - это путь; период. –

+0

Я извиняюсь, что это была ошибка, с моей стороны, я использую mysqli, просто дезинфицируя ВСЕ вход, поэтому мой поиск продолжает оставаться «%%» вместо «% ПОЛЬЗОВАТЕЛЕЙ ВХОДОВ В ПЕРЕМЕННОЙ ФОРМЕ%» – dav3ydark007

+1

Если у вас есть проблемы с вашим код, пожалуйста, отправьте реальный код. Если вы хотите предотвратить SQL Injection, используйте подготовленные операторы, а не escape-функции. –

ответ

2

вы должны использовать mysqli_real_escape_string вместо mysql_real_escape_string, потому что вы используете mysqli_* функции.

строка mysqli_real_escape_string (MySQLi $ ссылка, строка $ escapestr)

Вы должны переписать свои управляющие последовательности для

$city = mysqli_real_escape_string ($con, $_POST['City']); 
$business = mysqli_real_escape_string ($con, $_POST['Business']); 

И для предотвращения sql injection использования prepaid statements вместо этого.

+0

Я извиняюсь, что это была ошибка, с моей стороны, я использую mysqli, просто очищая ВСЕ вход, поэтому мой поиск продолжает оставаться «%%», % ВХОДЫ ПОЛЬЗОВАТЕЛЕЙ В ПЕРЕМЕННОЙ ФОРМЕ% 'Поиск работает отлично, когда я не использую mysqli_real_escape_string() – dav3ydark007