Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从IOS模拟器访问我的服务器MySql以检索数据_Php_Ios_Mysql_Swift_Mamp - Fatal编程技术网

Php 如何从IOS模拟器访问我的服务器MySql以检索数据

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

这段代码可能有什么问题,我正在尝试进入我的MAMP服务器,该服务器已打开,我在服务器中有一个php文件,我正在测试连接,诸如此类,如下所示:

<?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)) {}