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