2015-02-13 2 views
-1

Я подготовил запрос, как это:Dynamic подготовил заявление

$stmt = $mysqli->prepare("SELECT DISTINCT instr FROM raspisanie WHERE state='1' AND type!='free' AND instr=? AND school=? AND age=? AND startdate > NOW()"); 

И связывают так:

$stmt->bind_param("sis", $get_instr, $get_school, $get_age); 

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

Так что мне нужно сделать динамические и подготовить и привязать параметры? Каков правильный способ сделать это? Все переменные улавливаются GET из формы на сайте.

+1

Если все они являются необязательными и вы используете их в запросе, то все они должны иметь значение по умолчанию. – castis

+0

Это хорошая идея, но не работает для меня. – Bullwinkle

ответ

0

Ну, я нашел решение. Это то, что отлично подходит для меня

$sql = "SELECT instr FROM schedule WHERE state=1 AND type!='free' AND startdate > NOW()"; 

$school=$_GET['school']; 
$age=$_GET['age']; 
$instrument=$_GET['instrument']; 

if ($school==true) 
{ 
$sql .= " AND school=?"; 
$bind[]=$school; 
$type[0]='i'; 
} 

if ($age==true) 
{ 
$sql .= " AND (age=? OR mode='ind')"; 
$bind[]=$age; 
$type[0].='s'; 
} 

if ($instrument==true) 
{ 
$sql .= " AND instr=?"; 
$bind[]=$instrument; 
$type[0].='s'; 
} 

$params=array_merge($type, $bind); 

$stmt = $mysqli->prepare($sql); 
call_user_func_array(array($stmt, 'bind_param'), $params); 

$stmt->execute(); 
$stmt->bind_result($instr); 
$stmt->close(); 
Смежные вопросы