2013-02-12 3 views
3

Я использую вызов ajax для запроса базы данных. Я хотел бы передать сложный sql-запрос как часть данных ajax. Так я должен это делать?jquery ajax pass sql query

var myQuery = 'select * from table....';   

$.ajax({ 
    type: "GET", 
    url: 'jsonQuery.php', 
    dataType: 'json', 
    data: {keyvalue: 2416, q: myQuery}, 
    success: function(pieData) { 
     //do something with the response   
    } 

}); 
+6

Ну, в вашем синтаксисе нет ничего плохого, но по соображениям безопасности люди обычно не отправляют SQL на сервер ... Не забывайте, что ваш клиентский скрипт открыт для всех, я могу изменить SQL, который вы написали в своем код, чтобы делать то, что я хочу. Вы можете использовать «глагол», например «get» в качестве параметра GET, и пусть PHP решит, что SQL выполнить. – LotusH

ответ

4

Да, есть лучший способ. Сохраните запрос на странице .php и отправьте тип сообщения, в котором указывается, какой из них использовать.

Пример:

data: {keyvalue: 2416, q: 2}, 

Затем вы берете ваш запрос, соответствующий номер 2 и использовать это! Не нужно передавать SQL вместе!

0

Вы не должны передавать любой SQL-код непосредственно в jsonQuery.php, если это то, что я понимаю, что вы имеете в виду. Для этого откроется атака SQL-инъекций. См. http://bobby-tables.com/ просто google.

Скорее передать параметры в скрипт, например jsonQuery.php? Делать = ПОИСК & Itemid = 12 & типа = RED_ONES и создать свой запрос в течение jsonQuery.php с использованием этих параметров. Chack каждый для ожидаемых значений до этого.

1

Как утверждают другие, абсолютно не отправлять прямой SQL в вызов AJAX. Хакер мог легко написать свой собственный SQL-запрос для выполнения любого кода, который они хотят в вашей базе данных. Insead, вы можете передать POST несколько разных значений полей, которые вы хотите фильтровать (например, значение «имя» или «ключ» или «age_range»). Затем настройте PHP на принимающей стороне, чтобы быть умным, когда использовать эти значения; если ключ присутствует, используйте его как идентификатор и используйте запрос X. Если ключ отсутствует, проверьте имя или другие значения для поиска правильной строки и подключите их к запросу Y.

Как говорит ИндодИтраст, вы также можете отправить значение POST, который определяет, какие запросы использовать, т.е.

q: 'LongerQuery' 

затем в принимающем PHP, есть несколько IF или CASE-операторов, которые готовят другой запрос в зависимости от того, какого значения Q было.

На моем сайте есть генератор диаграмм, в котором пользователь может изменять настройки для данных, которые передаются по осям X и Y, независимо от того, разделены ли данные на разные серии и как пул данных должен быть отфильтрован, если пользователь хочет только чтобы посмотреть на конкретную демографию. Эти настройки отправляются через AJAX/POST, когда пользователь нажимает кнопку «Создать». Получающая страница PHP строит запрос данных диаграммы на основе этих 20-ти входов; результирующие запросы могут выглядеть совсем иными в зависимости от настроек, которые пользователь выбрал. Я описываю это, чтобы проиллюстрировать, что AJAX можно использовать для создания чрезвычайно гибких и отвечающих на запросы пользователей запросов, не создавая угрозы безопасности.