2012-03-26 6 views
0

Я пытаюсь создать поиск, где столбец и значение являются обе переменными, используя подготовленные операторы. Запрос - это то, где мне нужна помощь.Поиск с несколькими переменными PHP/Mysql

$column=$_POST['filter'][0][columnName]; 
$value = trim($_POST['filter'][0][value]); 

$stmt = $mysql->prepare("select * from TABLE WHERE $column like '%$value%'"); 

Я хочу, чтобы иметь возможность задавать разные колонки и пары значений для использования в сочетании с eachother- так, что я могу найти колонку один для одного значения, а также колонки два для другого значения.

спасибо!

+1

Звучит неплохо, так что в чем проблема? – Robert

+1

Ваш код открыт для SQL-инъекций. Хорошо, что вы используете подготовленные заявления, плохо, что вы не используете заполнители, чтобы фактически использовать функции анти-инъекции подготовленного заявления. –

+0

Роберт, я пытаюсь выяснить, как искать несколько столбцов для нескольких терминов. (Лаконично, если это возможно) Марк, да, я привязываю параметры, я просто сломал код, чтобы попытаться заставить его работать - плохой, это был долгий день , Спасибо, что посмотрел. – Severian

ответ

0

Я не думаю, что библиотека PHP mysql подготовила заявления. Является ли ваша переменная $ mysql фактически объектом соединения mysqli или pdo?

С MySQLi, ваш код будет выглядеть следующим образом:

$dbconnection = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 
$stmt = $dbconnection->prepare("select * from TABLE WHERE $column like '%?%'"); 
$stmt->bind_param('s',$value); 

Там нет никакого способа, чтобы связать параметр для имени столбца, который означает, что вы застряли вставку $column непосредственно в запрос. Выполнение этого с любым значением, которое пользователь передал вам в POST, - это немного дыры в безопасности. Поскольку он ограничен одинаковым именем одного из ваших имен столбцов, я бы предложил сначала его проверить, чтобы убедиться, что он не настроен на что-то другое.

+0

Да, его mysqli, извините. Я пытался как можно больше сломать его. Я все еще просто пытаюсь найти лучший способ заставить его работать, я буду решать проблему безопасности. Спасибо, я не знал, что вы не можете привязать параметр для имен столбцов, чтобы уже помог мне. Так что было бы лучшим способом закодировать это? Скажем, я проверяю и удостоверяюсь, что это один из 20-ти столбцов, которые у меня есть, и что? – Severian

+0

Вы можете вставить имя столбца в качестве переменной, точно так же, как в своем примере кода. Он не обеспечивает безопасность, связанную с привязкой параметра, например, вы делаете с $ value, но до тех пор, пока вы убедитесь, что это одобренное имя столбца, тогда вы в порядке. – octern

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