Php 如何从IOS模拟器访问我的服务器MySql以检索数据
这段代码可能有什么问题,我正在尝试进入我的MAMP服务器,该服务器已打开,我在服务器中有一个php文件,我正在测试连接,诸如此类,如下所示:Php 如何从IOS模拟器访问我的服务器MySql以检索数据,php,ios,mysql,swift,mamp,Php,Ios,Mysql,Swift,Mamp,这段代码可能有什么问题,我正在尝试进入我的MAMP服务器,该服务器已打开,我在服务器中有一个php文件,我正在测试连接,诸如此类,如下所示: <?php header('Content-type: application/json'); if($_POST) { $username = $_POST['username']; $password = $_POST['password']; echo $username echo $password
<?php
header('Content-type: application/json');
if($_POST) {
$username = $_POST['username'];
$password = $_POST['password'];
echo $username
echo $password
if($username && $password) {
$db_name = 'DBTest';
$db_user = 'pedro';
$db_password = 'pedro';
$server_url = 'localhost';
$mysqli = new mysqli('localhost', $db_user, $db_password, $db_name);
/* check connection */
if (mysqli_connect_errno()) {
error_log("Connect failed: " . mysqli_connect_error());
echo '{"success":0,"error_message":"' . mysqli_connect_error() . '"}';
} else {
if ($stmt = $mysqli->prepare("SELECT username FROM users WHERE username = ? and password = ?")) {
$password = md5($password);
/* bind parameters for markers */
$stmt->bind_param("ss", $username, $password);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($id);
/* fetch value */
$stmt->fetch();
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
if ($id) {
error_log("User $username: password match.");
echo '{"success":1}';
} else {
error_log("User $username: password doesn't match.");
echo '{"success":0,"error_message":"Invalid Username/Password"}';
}
}
} else {
echo '{"success":0,"error_message":"Invalid Username/Password."}';
}
}else {
echo '{"success":0,"error_message":"Invalid Data."}';
}
?>
我提出请求的方式可能有什么问题
EDIT2:我已经更改了代码并激活了mysql日志以查看查询,但是$stmt->get_result()或fetch()仍然不起作用,我不知道为什么。我并不是在整个IOS中都这么做,但这里的简单浏览器是最麻烦的部分
修改部分:
$mysqli = new mysqli('localhost', $db_user, $db_password, $db_name);
/* check connection */
if (mysqli_connect_errno()) {
error_log("Connect failed: " . mysqli_connect_error());
echo '{"success":0,"error_message":"' . mysqli_connect_error() . '"}';
} else {
$query = "SELECT dataOne,password FROM users WHERE username = ? and password = ?";
if ($stmt = $mysqli->prepare($query)) {
//$password = md5($password);
/* bind parameters for markers */
$stmt->bind_param("ss", $username, $password);
/* execute query */
$stmt->execute();
//$stmt->debugDumpParams();
echo $stmt->sqlstate;
var_dump($stmt);
/* bind result variables */
//$stmt->bind_result($dataOne,$password);
$result = $stmt->get_result();
printf("test: ", $dataOne, $password);
//fetch value
while($stmt->fetch()) {
echo $dataOne;
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
if ($result != null) {
error_log("User $username: password match.");
echo '{"success":1, "dataOne:"'.$dataOne.'}';
} else {
error_log("User $username: password doesn't match.");
echo '{"success":0,"error_message":"Invalid Username/Password"}';
}
}
$stmt没有在get_result()上重新调整任何内容,或者没有进入while(fetch()),我现在不知道。有什么帮助吗?如果您的web服务器抛出http错误代码500(内部错误),那是因为您的PHP脚本正在崩溃。我会尝试阅读php日志,并尝试对php脚本进行一些调试 也许你的iOS应用程序中发布的数据有问题,导致php脚本失败 在本例中,从safari访问localhost:8888也不能证明php脚本正在工作,因为它需要您发布任何数据以供脚本执行
if($\u POST){
。只要浏览该脚本,if语句就永远不会是true
编辑:
有时一次验证一个组件会有所帮助。请尝试构建一个简单的html表单,在服务器上发布username
和password
(http://localhost:8888/jsonlogin2.php
)。当您看到此操作按预期工作时,请继续确保应用程序正常工作。这样,您就可以判断错误是在服务器(php脚本)上还是在应用程序中
也可以这样检查$\u POST
:
if (!empty($_POST)) {}
这将检查$\u POST
是否为空
你的应用程序也在使用application/x-form-urlencoded
,我猜应该是:application/x-www-form-urlencoded
但是再一次。制作一个本地html表单,确保您的php脚本正常工作,然后转到应用程序。很明显,错误来自echos$我对我的php非常生疏,我将进入它:)并且无论如何,如果($\u POST){}只是抛出无效数据错误,请参阅我的EDIT2,则不会执行。谢谢
2015-06-04 17:16:11.914 ParkingApp[3777:126598] Response: ==> {"success":0,"error_message":"Invalid Data."}
$mysqli = new mysqli('localhost', $db_user, $db_password, $db_name);
/* check connection */
if (mysqli_connect_errno()) {
error_log("Connect failed: " . mysqli_connect_error());
echo '{"success":0,"error_message":"' . mysqli_connect_error() . '"}';
} else {
$query = "SELECT dataOne,password FROM users WHERE username = ? and password = ?";
if ($stmt = $mysqli->prepare($query)) {
//$password = md5($password);
/* bind parameters for markers */
$stmt->bind_param("ss", $username, $password);
/* execute query */
$stmt->execute();
//$stmt->debugDumpParams();
echo $stmt->sqlstate;
var_dump($stmt);
/* bind result variables */
//$stmt->bind_result($dataOne,$password);
$result = $stmt->get_result();
printf("test: ", $dataOne, $password);
//fetch value
while($stmt->fetch()) {
echo $dataOne;
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
if ($result != null) {
error_log("User $username: password match.");
echo '{"success":1, "dataOne:"'.$dataOne.'}';
} else {
error_log("User $username: password doesn't match.");
echo '{"success":0,"error_message":"Invalid Username/Password"}';
}
}
if (!empty($_POST)) {}