Сначала используйте параметризованный запрос, не создавайте их динамически. Примеры и объяснения в MSDN .
Напишите хранимую процедуру, которая будет получать value
выбранную опцию и принесет вам нужные данные. Fe:
CREATE PROCEDURE dbo.getevents
@value int
AS
SELECT *
FROM events
WHERE somecolumn = @value
Это упрощенная версия, я думаю, вам нужен какой-то if
оператор вродеIF @value = 0...SELECT this ... IF @value = 1
В этом случае вы можете использовать:
$sql = "EXEC dbo.getevents ?";
$stmt = sqlsrv_query($conn, $sql, array($value));
А затем получите результаты и покажите их на своей странице.
EDIT # 1
Использование XAMP и SQL Server 2014
Отказ от ответственности: я публикую этот код только для демонстрационной цели. Параметры передаются как строка, не стилизация, а может быть, некоторые ошибки.
У меня установлен XAMP . Загруженные sqlsrv
библиотеки, включите их php.ini
.
Я получил локальный SQL Server с тестом sqldev
. SQL-сервер имеет экземпляр с именем workshop
. Мое имя компьютера SERVERINSTANCE
. Так, а не workshopsqldev
должно быть DATABASE
. Вместо DATABASE
- Test
. Это то, что я написал для подключения.
Сначала я создаю таблицу следующим образом:
CREATE TABLE dummy (
id int identity(1,1),
[Desc] nvarchar(max),
[Type] nvarchar(100)
)
INSERT INTO dummy VALUES
('Do something already','Events'),
('Congrats!','Events'),
('Meet up at six PM','Meetings'),
('To Amsterdam','Travels'),
('goodbye!','Leaves')
Таблица содержит некоторые фиктивные данные для воспроизведения.
Следующий шаг:
Загрузите jQuery из https://jquery.com/download/ (я использовал jquery-3.1.1.js
)
<html> <head> <script src = "jquery-3.1.1.js" > </ script> <style> таблица { width : 20% } table , td , th { border-collapse : collapse ; граница : 1px сплошной серый ; } </ style> </ head> <body> <div> Выбор событий </ div> События <input type = "checkbox" id = "опция" class = "options" name = "options []" value = "Events " > Листы <input type = " checkbox " id = " option " class = " options " name = " options [] " value = " Leaves " > Meetings <input type = " checkbox " id = " option " class = " options " name = " options [] " value = " Meetings " > Travels <input type = " checkbox " id = " option " class = " options " name = " options [] " value = " Travels " > <div id = " response " > </ div> <script> $ ( 'input: checkbox' ). click ( function () { $ . ajax ({ url : "sql_page.php" , type : "post" , data : $ ( '.options: checked' ). serialize (), success : function ( data ) { $ ( '#response' ). html ( data ); } }); }); </ script> </ body> </ html>
<?php
header('Content-Type: text/html; charset=utf-8');
$serverName = "SERVERINSTANCE";
$connectionInfo = array("Database"=>"DATABASE");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if(isset($_POST['options'])) {
if( $conn === false ) {
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
$values = $_POST['options'];
$valuelist = "'" . implode("', '", $values) . "'";
$tsql = "SELECT * FROM dummy WHERE [Type] IN (".$valuelist.");";
$stmt = sqlsrv_query($conn, $tsql);
if( $stmt === false ) {
echo "Error in executing query.</br>";
die( print_r( sqlsrv_errors(), true));
}
echo "<table>";
while ($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) {
echo "<tr>
<td>".$obj[0]."</td>
<td>".$obj[1]."</td>
<td>".$obj[2]."</td>
</tr>
";
}
echo "</table>";
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn );
}
?>
index.php
sql_page.php
Затем я продолжаю index.php
в своем браузере:
Если вы используете MySQL, вам нужны другие библиотеки и команды для использования, но они похожи на то, что я написал. Основная идея - подключиться к базе данных и запустить некоторый запрос с параметрами, это sql_page.php
идея.
index.php
Часть отправляет запрос Ajax к sql_page.php
когда Флажки щелкнул. А затем покажите данные с этой страницы (полученной от SQL Server) в div с id=response
.
EDIT # 2
Использование EasyPHP Devserver 16.1.1 dowloaded от сюда
Я установил EasyPHP в папку по умолчанию, запустил его, поехал 8888
, начал Apache + PHP на порт air-hr
, запустил MySQL.
Я создаю имя базы данных events
, названное в ней. Сценарий и структура таблицы ниже:CREATE TABLE `events` ( `eventid` int(11) NOT NULL, `eventname` varchar(100) NOT NULL, `eventcategory` varchar(100) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `events` (`eventid`, `eventname`, `eventcategory`) VALUES (1, 'Go now!', 'Leaves'), (2, 'Meet some new people', 'Meetings'), (3, 'Travel to Amsterdam', 'Travels'), (4, 'PARTY HARD!', 'Events');
test
Также я создаю пользователя, test
который может подключаться к БД и выбирать из таблицы.
Я создал 2 файла в C:Program Files (x86)EasyPHP-Devserver-16.1eds-www
папке проекта (их описание ниже) и скопируйте jquery-3.1.1.js
.
index.php, как указано выше, и
sql_page.php
<?php
header('Content-Type: text/html; charset=utf-8');
if(isset($_POST['options'])) {
$values = $_POST['options'];
$valuelist = "'" . implode("', '", $values) . "'";
$query = "SELECT * FROM events WHERE eventcategory IN (".$valuelist.");";
$link = mysqli_connect("localhost", "test", "testpass", "air-hr");
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "<table>";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_row($result)) {
echo "<tr>
<td>".$row[0]."</td>
<td>".$row[1]."</td>
<td>".$row[2]."</td>
</tr>
";
}
mysqli_free_result($result);
}
echo "</table>";
mysqli_close($link);
}
?>
И результаты здесь:
Надеюсь, это поможет вам!