Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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 从android手机向mysql数据库插入数据_Php_Android_Mysql - Fatal编程技术网

Php 从android手机向mysql数据库插入数据

Php 从android手机向mysql数据库插入数据,php,android,mysql,Php,Android,Mysql,想知道有人能帮我吗我对安卓系统还很陌生,我在尝试创建的一个应用程序中遇到了一个问题。该应用程序从附近的手机接收rssi值,然后我尝试将这些读取数据保存到web服务器,根据Logcat,我看起来连接正常,但我在PHP脚本中的SQL查询似乎导致了问题,我可能错了。如果有任何帮助,将不胜感激 我正在发布我的android代码、php脚本和logcat class ConnectToDB extends AsyncTask<String, Void, String> { @Over

想知道有人能帮我吗我对安卓系统还很陌生,我在尝试创建的一个应用程序中遇到了一个问题。该应用程序从附近的手机接收rssi值,然后我尝试将这些读取数据保存到web服务器,根据Logcat,我看起来连接正常,但我在PHP脚本中的SQL查询似乎导致了问题,我可能错了。如果有任何帮助,将不胜感激

我正在发布我的android代码、php脚本和logcat

class ConnectToDB extends AsyncTask<String, Void, String>
{

    @Override
    protected String doInBackground(String... params)
    {
        try
        {
            Looper.prepare();

            String ssid1 = params[0];
            String rssi1 = params[1];
            String ssid2 = params[2];
            String rssi2 = params[3];

            // Add items to be added to the database
            List<NameValuePair> prams = new ArrayList<NameValuePair>();
            prams.add(new BasicNameValuePair("Ssid1", ssid1));
            prams.add(new BasicNameValuePair("Rssi1", rssi1));
            prams.add(new BasicNameValuePair("Ssid2", ssid2));
            prams.add(new BasicNameValuePair("Rssi2", rssi2));

            Log.e("Values in prams", String.valueOf(prams.size()));
            Log.e("Elements in prams", prams.toString());

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(URL);
            httpPost.setEntity(new UrlEncodedFormEntity(prams));
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

            Log.e("pass 1", "connection success ");
            Toast.makeText(getApplicationContext(), "Connection Made", Toast.LENGTH_LONG).show();

        }
        catch (Exception e)
        {
            Log.e("Fail 1", e.toString());
            Toast.makeText(getApplicationContext(), "Invalid Ip Address", Toast.LENGTH_LONG).show();
        }

        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder secondB = new StringBuilder();

            String line;
            while ((line = reader.readLine()) != null)
            {
                secondB.append(line).append("\n");
            }
            is.close();
            result = secondB.toString();

            Log.e("pass 2", "reader success");
        }
        catch (Exception e)
        {
            Log.e("Fail 2", e.toString());
        }
        try
        {
            Log.i("JsonObject", result);
            JSONObject json_data = new JSONObject(result);

            int code = (json_data.getInt("code"));

            if (code == 1)
            {
                Toast.makeText(getBaseContext(), "Inserted Successfully", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(getBaseContext(), "Sorry, Try Again", Toast.LENGTH_LONG).show();
            }
        }
        catch (Exception e)
        {
            Log.e("Fail 3", e.toString());
        }

        return "complete";
    }

    protected void onPostExecute(String string)
    {
        Log.d("Response: ", string);
    }
}
和Logcat:

07-08 23:35:42.991    5465-5465/com.lyit_android_society.com.rssireader E/﹕ mali:      REVISION=Linux-r3p2-01rel3 BUILD_DATE=Fri Nov 29 14:18:37 KST 2013
07-08 23:35:43.056    5465-5465/com.lyit_android_society.com.rssireader D/OpenGLRenderer﹕ Enabling debug mode 0
07-08 23:35:43.061    5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ unregisterIRListener() is called
07-08 23:35:43.086    5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ unregisterIRListener() is called
07-08 23:35:43.096    5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ unregisterIRListener() is called
07-08 23:35:51.731    5465-5500/com.lyit_android_society.com.rssireader E/Values in prams﹕ 4
07-08 23:35:51.731    5465-5500/com.lyit_android_society.com.rssireader E/Elements in prams﹕ [Ssid1=TestPhone3, Rssi1=-38, Ssid2=Testphone1, Rssi2=-28]
07-08 23:35:51.766    5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ unregisterIRListener() is called
07-08 23:35:52.366    5465-5500/com.lyit_android_society.com.rssireader E/pass 1﹕ connection success
07-08 23:35:52.406    5465-5500/com.lyit_android_society.com.rssireader E/pass 2﹕ reader success
07-08 23:35:52.406    5465-5500/com.lyit_android_society.com.rssireader I/JsonObject﹕ <br />
<b>Warning</b>:  mysql_query(): supplied argument is not a valid MySQL-Link resource in <b>/home/denis/public_html/webservice/insert.php</b> on line <b>18</b><br />
<br />
<b>Warning</b>:  mysql_query(): supplied argument is not a valid MySQL-Link resource in <b>/home/denis/public_html/webservice/insert.php</b> on line <b>19</b><br />
null
07-08 23:35:52.406    5465-5500/com.lyit_android_society.com.rssireader E/Fail 3﹕ org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
07-08 23:35:52.406    5465-5465/com.lyit_android_society.com.rssireader D/Response:﹕ complete
07-08 23:35:42.991 5465-5465/com.lyit_android_society.com.rssireader E/﹕ 马里:修订版=Linux-r3p2-01rel3构建日期=周五11月29日14:18:37 KST 2013
07-08 23:35:43.056 5465-5465/com.lyit_android_society.com.rssireader D/opengl﹕ 正在启用调试模式0
07-08 23:35:43.061 5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ 调用unregisterListener()
07-08 23:35:43.086 5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ 调用unregisterListener()
07-08 23:35:43.096 5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ 调用unregisterListener()
07-08 23:35:51.731 5465-5500/com.lyit_android_society.com.rssileader E/婴儿车价值观﹕ 4.
07-08 23:35:51.731 5465-5500/com.lyit_android_society.com.rssileader E/prams中的元素﹕ [Ssid1=TestPhone3,Rssi1=-38,Ssid2=Testphone1,Rssi2=-28]
07-08 23:35:51.766 5465-5465/com.lyit_android_society.com.rssireader D/AbsListView﹕ 调用unregisterListener()
07-08 23:35:52.366 5465-5500/com.lyit_android_society.com.rssireader E/pass 1﹕ 连接成功
07-08 23:35:52.406 5465-5500/com.lyit_android_society.com.rssireader E/pass 2﹕ 读者成功
07-08 23:35:52.406 5465-5500/com.lyit_android_society.com.rssireader I/JsonObject﹕ 
警告:mysql_query():提供的参数不是第18行/home/denis/public_html/webservice/insert.php中的有效mysql链接资源

警告:mysql_query():提供的参数不是第19行/home/denis/public_html/webservice/insert.php中的有效mysql链接资源
无效的
07-08 23:35:52.406 5465-5500/com.lyit_android_society.com.rssireader E/Fail 3﹕ org.json.JSONException:Value您需要修复sql字符串。它们在值周围缺少单引号。 即应为:

mysql_查询($con,“插入电话_表(ap,rssi)值($ap1',$rssi1'))


但我还必须补充一点,您应该修复代码以防止sql注入。这不是与数据库交互的最佳方式。看看像标准PDO()这样的MySQL API。一般来说,sql应该参数化,传递给数据库的所有值都应该转义。大多数API都提供了一些方便的方法来帮助实现这一点。

强制性建议。它们不再得到维护。看到了吗?相反,学习,并使用,或-将帮助您决定哪一个。如果您选择PDO


我已将您的代码移植到PDO,希望能有所帮助

<?php 
//connect using PDO - change CAPPED strings to suit
try{
    $db = new PDO("mysql:host=127.0.0.1;dbname=DBNAME", 'USERNANE', 'PASSWORD',
        array(
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        )
    );
}catch(PDOException $e){
    exit($e->getMessage());
}

//set default
$flag['code'] = 0;

//is it POST
if($_SERVER['REQUEST_METHOD'] == 'POST'){

    //are expected values not empty
    if( !empty($_POST['Ssid1']) && !empty($_POST['Rssi1']) &&
        !empty($_POST['Ssid2']) && !empty($_POST['Rssi2']) )
    {
        //build query
        $sql = "INSERT INTO phone_table (ap, rssi) VALUES (?, ?), (?, ?)";

        //prepare it
        $stmt = $db->prepare($sql);

        //bind POST values
        $stmt->bindParam(1, $_POST['Ssid1']);
        $stmt->bindParam(2, $_POST['Rssi1']);
        $stmt->bindParam(3, $_POST['Ssid2']);
        $stmt->bindParam(4, $_POST['Rssi2']);

        $stmt->execute();

        $flag['code'] = 1;
    }

}

header('Content-Type: application/json');
exit(json_encode($flag));
?>


根据您的服务器,您可能无法远程建立该连接。您可能应该尝试使用we view并以这种方式发送数据,因为它将从服务器上运行。您在哪里设置
$host、$username、$password、$dbname
?以及它的
mysql\u查询('SQL',$con)您的应用程序也可能被滥用,请在启用之前修复SQL注入漏洞,另外,
mysql.*
函数也不推荐使用。RTM
mysql.\u query(string$query[,resource$link\u identifier=NULL])
阅读我关于$conThank的评论谢谢你的帮助我只是想了解一下这其中的大部分内容,所以这是一个很棒的.np,我想我只是移植它,而不是告诉你做错了,并给出一个使用旧API的答案。。你可能不理解。另外,我更喜欢写代码,而不是随意的长句子。快乐编码!
<?php 
//connect using PDO - change CAPPED strings to suit
try{
    $db = new PDO("mysql:host=127.0.0.1;dbname=DBNAME", 'USERNANE', 'PASSWORD',
        array(
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        )
    );
}catch(PDOException $e){
    exit($e->getMessage());
}

//set default
$flag['code'] = 0;

//is it POST
if($_SERVER['REQUEST_METHOD'] == 'POST'){

    //are expected values not empty
    if( !empty($_POST['Ssid1']) && !empty($_POST['Rssi1']) &&
        !empty($_POST['Ssid2']) && !empty($_POST['Rssi2']) )
    {
        //build query
        $sql = "INSERT INTO phone_table (ap, rssi) VALUES (?, ?), (?, ?)";

        //prepare it
        $stmt = $db->prepare($sql);

        //bind POST values
        $stmt->bindParam(1, $_POST['Ssid1']);
        $stmt->bindParam(2, $_POST['Rssi1']);
        $stmt->bindParam(3, $_POST['Ssid2']);
        $stmt->bindParam(4, $_POST['Rssi2']);

        $stmt->execute();

        $flag['code'] = 1;
    }

}

header('Content-Type: application/json');
exit(json_encode($flag));
?>