swift Странная реакция на contentFromUrl

У меня есть php файл в моем хосте. Я использую его для доступа к базе данных MySQL.

У меня есть два файла PHP, один для ВСТАВИТЬ и один для ВЫБРАТЬ. Оба работают, когда я использую URL в моем браузере.

domain.com/insert.php?query=insert%20into%20user%20(user,pass,email,phone)%20values('test','test','test','test');

domain.com/select.php?query=SELECT%20`id`%20FROM%20`user`%20WHERE%20user%20=%20'user'%20and%20pass%20=%20'pass';

оба работают правильно, когда я использую их в браузере. У меня есть быстрое приложение, которое отправляет и получает данные через файл php contentsFromUrl,

let strURL = "http://domain.com/insert.php?query=insert%20into%20user%20(user,pass,email,phone)%20values('test','test','test','test');"var dataURL = NSData(contentsOfURL: NSURL(string: strURL)!);

Это работает правильно, и я могу легко вставить данные в мою базу данных.
У меня есть другой код для выбора данных из базы данных, используя URL-адрес. Тот же путь пошел.

let strURL = "http://domain.com/select.php?query=SELECT%20`id`%20FROM%20`user`%20WHERE%20user%20=%20'user'%20and%20pass%20=%20'pass';"var dataURL = NSData(contentsOfURL: NSURL(string: strURL)!);

Когда я запускаю этот код, он говорит fatal error: unexpectedly received nil

Когда я копирую этот URL из моего быстрого кода и вставляю его в свой браузер, он делает это правильно и дает мне данные, которые я хочу !!

Чистая глупость, я имею в виду разницу между строками? оба php-файла возвращают строку, но кажется, что когда я использую оператор select, он ничего не получает: |

Пожалуйста, помогите мне, это сводит меня с ума: \

0

Решение

URL-адреса должны начинаться с их протокола (http или https). Инициализация со вторым URL возвращает nil, и вы принудительно разворачиваете его: NSURL(string: strURL)!, Вот где вы получаете крах. Он возвращает ноль, потому что ему не передан действительный URL.

Добавьте «http: //» в начало URL, и он будет работать:

let strURL = "http://domain.com/select.php?query=SELECT%20`id`%20FROM%20`user`%20WHERE%20user%20=%20'user'%20and%20pass%20=%20'pass';"var dataURL = NSData(contentsOfURL: NSURL(string: strURL)!);

Примечание: этот URL работает в вашем браузере, потому что браузер хорош и принимает «http», если вы не указали протокол.

1

Другие решения

Вам нужно проверить свою ссылку, используя stringByAddingPercentEncoding:

let strLink = "http://domain.com/select.php?query=SELECT%20`id`%20FROM%20`user`%20WHERE%20user%20=%20'user'%20and%20pass%20=%20'pass';"let linkComponents = strLink.componentsSeparatedByString("?")
if let query = linkComponents.last?.stringByRemovingPercentEncoding {
print(query)   // "query=SELECT `id` FROM `user` WHERE user = 'user' and pass = 'pass';"if let queryPercentEncoded = query.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) {
print(queryPercentEncoded)   // "query=SELECT%20%60id%60%20FROM%20%60user%60%20WHERE%20user%20=%20'user'%20and%20pass%20=%20'pass';"let linkPercentEncoded = (linkComponents.first ?? "") + "?" + queryPercentEncoded
if let strURL = NSURL(string: linkPercentEncoded ) {
print(true)
// note you should download your data asynchronously using NSURLSession dataTaskFromURL
if let data = NSData(contentsOfURL:  strURL) {
print(data.length)
}
}
}
}
0

По вопросам рекламы [email protected]