php - 对 contentsFromUrl 的快速奇怪 react

标签 php ios mysql swift nsdata

我在主机中放置了一个 php 文件。我用它来访问 mySQL 数据库。

我有两个php文件,一个用于INSERT,一个用于SELECT。当我在浏览器中使用 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';

当我在浏览器中使用它们时,它们都能正常工作。我有一个 swift 应用程序,它通过 contentsFromUrl 的 php 文件发送和接收数据。

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

当我从我的 swift 代码中复制这个 url 并将其粘贴到我的浏览器中时,它会正确执行并为我提供我想要的数据!!

纯粹的愚蠢,我的意思是字符串之间有什么区别?两个 php 文件都返回一个字符串,但似乎当我使用 select 语句时,它没有收到任何东西:|

请帮助我,这让我发疯:\

最佳答案

URL 必须以其协议(protocol)(http 或 https)开头。使用第二个 URL 的初始化返回 nil,您正在强行解包它:NSURL(string: strURL)!。这就是你发生崩溃的地方。它返回 nil,因为没有向它传递有效的 URL。

在 URL 的开头添加一个“http://”,它将起作用:

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 在您的浏览器中有效,因为浏览器非常好,如果您未指定协议(protocol),则假定为“http”。

关于php - 对 contentsFromUrl 的快速奇怪 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27631444/

相关文章:

mysql - 从 MySQL 过渡到 Elasticsearch 时处理搜索?

mysql - 如何在 MySQL 中创建存储过程

.net - MySQL - 无法序列化日期/时间值

php - 如何使用 PHP 和 MYSQLI 获取 MySQL 列表数据库

php - 如何将 sleep 设置添加到 cron 作业

ios - 如何将 Float 转换为 NSData 字节

iOS 14 如何触发本地网络对话框并检查用户答案?

php - 如何将从下拉框中选择的值与数组元素进行比较?

php - 亚马逊 MWS 订单 API 时间戳必须遵循 ISO8601

ios - 在UITableView和UINavigationBar之间删除