У меня есть 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, он ничего не получает: |
Пожалуйста, помогите мне, это сводит меня с ума: \
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», если вы не указали протокол.
Вам нужно проверить свою ссылку, используя 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)
}
}
}
}