Рейтинг:
0
Chris Copeland
Помните, что при такой привязке параметров адаптер базы данных будет экранировать все значения, которые были помещены в запрос. В этом примере вы пытаетесь связать $searchQuery
, $columnName
и $columnSortOrder
как фактические значения SQL. Это не сработает, так как привязка будет ускользать от них (в данном случае, окружая их одинарными кавычками.)
Чего ты ждешь:
select * from employees where 1 $searchQuery order by $columnName $columnSortOrder limit $row, $rowperpage
Что происходит из - за побега:
select * from employees where 1 '$searchQuery' order by '$columnName' '$columnSortOrder' limit $row, $rowperpage
Вместо этого убедитесь, что вы сами заполняете 3 строковые переменные (так что вам гарантировано, что не будет никакой SQL-инъекции), а затем просто поместите их в строковую часть метода:
select * from employees where 1 $searchQuery order by $columnName $columnSortOrder limit ?, ?
Кроме того, как уже упоминал Ричард, имея
where 1
это немного странно.
Member 14093672
Прежде всего, спасибо Вам, Крис и Ричард, и следующее прекрасно работает.
1.
Скрыть скопировать код
<pre>$stmt = $con->prepare("select * from employee where 1 $searchQuery order by $columnName $columnSortOrder limit ?, ?");$stmt->bindParam(1, $row,PDO::PARAM_INT);$stmt->bindParam(2, $rowperpage,PDO::PARAM_INT);
2. Общее количество записей работает нормально.
Скрыть скопировать код$totalRecordwithFilter = $con->query("SELECT count(*) from employee WHERE 1 $searchQuery")->fetchColumn();
Однако в отношении того, где 1 выглядит странно , это было методом проб и ошибок, и я забыл, где я получил это место 1. Прошу прощения за это, но в тот момент, когда вы берете "1" , откуда
предложение, запрос перестает работать, и я получаю следующую ошибку? не знаю почему, но это немного странно и странно для меня тоже.
Скрыть скопировать кодFatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 in C:\fetch.php:27 Stack trace: #0 C:\fetch.php(27): PDO->query('SELECT count(*)...') #1 {main} thrown in C:\fetch.php on line 27
а строка 27-это ... без того, где 1
Скрыть скопировать код$totalRecordwithFilter = $con->query("SELECT count(*) from employee WHERE $searchQuery")->fetchColumn();
Chris Copeland
Извините, что не вернулся раньше, я был занят в декабре! Вполне вероятно, что $searchQuery может быть пустым или нулевым, и поэтому запрос будет заканчиваться на "WHERE", что недопустимо. В идеале вы должны проверить, действительно ли поисковый запрос имеет значение, и, возможно, соответствующим образом скорректировать содержимое:
if ($searchQuery != '') { $searchQuery = ' WHERE '.$searchQuery;}
Затем вы можете использовать его в своем запросе, который будет включать предложение только в том случае, если оно было заполнено. Если бы вы оставили это "где 1", то переменная $searchQuery должна была бы начинаться с " и "