我在主机中放置了一个 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/