мой sql такой:
$si_like_param="%".$si_gl_group_id."5";
$stmt = $db->prepare("select m1.id, m1.name, m1.surname, m1.fathername,
m1.region_num,m1.school_num,m1.variant,
m1.sinif, m1.qrup,m1.f_lan
from students_answers m1,
results m2
where
m1.id_exam=:si_exam_id
and m1.id=m2.st_answer_id
and m2.result_level >= :si_min_score
and m1.school_num in ('003','018','019','020')
and m1.region_num = 20
and m1.qrup like :si_group_id
order by m2.result_level desc;");
$stmt->bindparam(":si_exam_id", $si_exam_id);
$stmt->bindparam(":si_min_score", $si_min_score);
$stmt->bindparam(":si_group_id", $si_like_param,PDO::PARAM_STR);
возможно, что эта переменная $ si_gl_group_id имеет значение null.
в моем HTML это так:
<option value="">All</option>
<option value="0">Zero</option>
<option value="1">One</option>
когда я выполняю этот запрос на phpmyadmin, он работает, но в скрипте он не работает.
Вы должны использовать Concat concat('%', :si_group_id, '5')
так
$ Si_like_param = $ si_gl_group_id;
$stmt = $db->prepare("select m1.id, m1.name, m1.surname, m1.fathername
, m1.region_num, m1.school_num,m1.variant,m1.sinif, m1.qrup,m1.f_lan
from students_answers m1, results m2
where m1.id_exam=:si_exam_id
and m1.id=m2.st_answer_id
and m2.result_level >= :si_min_score
and m1.school_num in ('003','018','019','020')
and m1.region_num = 20
and m1.qrup like concat('%', :si_group_id, '5')
order by m2.result_level desc;");
$stmt->bindparam(":si_exam_id", $si_exam_id);
$stmt->bindparam(":si_min_score", $si_min_score);
$stmt->bindparam(":si_group_id", $si_like_param,PDO::PARAM_STR);
и вы не должны использовать старый синтаксис имплицированного соединения, а явный синтаксис объединения как
$stmt = $db->prepare("select m1.id, m1.name, m1.surname, m1.fathername
, m1.region_num, m1.school_num,m1.variant,m1.sinif, m1.qrup,m1.f_lan
from students_answers m1
INNER JOIN results m2 ON m1.id=m2.st_answer_id
where m1.id_exam=:si_exam_id
and m2.result_level >= :si_min_score
and m1.school_num in ('003','018','019','020')
and m1.region_num = 20
and m1.qrup like concat('%', :si_group_id, '5')
order by m2.result_level desc;");
$stmt->bindparam(":si_exam_id", $si_exam_id);
$stmt->bindparam(":si_min_score", $si_min_score);
$stmt->bindparam(":si_group_id", $si_like_param,PDO::PARAM_STR);
Других решений пока нет …