2013-11-24 5 views
1

Как связать неизвестное количество параметров с Mysqli? Например, после моего кода:Mysqli bind - неизвестное количество параметров

<?php 
include 'config.php'; 
$query = "SELECT * FROM table WHERE"; 
if(isset($_POST['r1'])) 
    $query = $query." id = '$_POST['r1']'"; 
if(isset($_POST['r2'])) 
    $query = $query." AND par2 = '$_POST['r2']'"; 
$e = mysqli_prepare($conf, $query); 
?> 

Как выполнить привязку параметров?

+0

Вы никогда не должны использовать 'isset'. Вместо этого используйте '! Empty'. – DevlshOne

+3

@DevlshOne в этом случае 'isset' является правильным выбором. Предположим, что одна из этих переменных $ _POST равна 0? Это законное значение, но 'empty()' вернет неправильное значение для этой цели. –

+0

Использование 'empty' для проверки данных формы обычно является плохим выбором. 'isset' подразумевает как объявленную, так и определенную переменную, а так как данные формы имеют тип string, где пустая строка по-прежнему рассматривается как определяющая переменную,' isset' является правильным выбором здесь. – brezanac

ответ

1

Подготовленные утверждения, вероятно, не лучший способ сделать это. Вы можете собрать запрос так же, как вы это делаете, если вы убедитесь, что вы избегаете ввода пользователем. Например:

<?php 

// assuming $db is a mysqli object 

$query = "SELECT * FROM table WHERE"; 
if(isset($_POST['r1'])) 
    $query = $query."id = '".$db->real_escape_string($_POST['r1'])."'"; 
if(isset($_POST['r2'])) 
    $query = $query." AND par2 = '".$db->real_escape_string($_POST['r2'])."'"; 

$result = $db->query($query); 
?> 

Не забудьте добавить обязательную проверку ошибки.

+0

Нет способа? Потому что я хотел бы использовать bind ... – user3022323

+0

Навязчивое рвение, с которым подготовленные заявления транслируются на этом сайте как _the_ способ защитить от SQL Injection, игнорирует многие случаи краев, когда готовые заявления ненужны, неуклюжи или невозможны в использовании. Это одно. Если вы проявляете достаточную осторожность, избегая ваших входов, нет причин, по которым простой запрос не должен быть абсолютно безопасным. –

+1

@ user3022323 С помощью PDO вы * можете * использовать подготовленные заявления. Переключение на PDO для вас? –

Смежные вопросы