用PHP读取JSON数组

时间:2012-03-17 00:09:55

标签: php mysql json

我写了一个简单的PHP脚本,它将接收一个JSON数组(所以我认为),它会将接收到的数组添加到MySQL数据库中。但是,当我调用脚本时,它只将数组中的最后一项添加到数据库中。这里有什么简单的东西我不见了吗?

另外,我的TRUNCATE TABLE无法从表中删除任何内容。

<?php 
$handle = mysql_connect('localhost','root',''); 
if($handle==false) 
{ 
die('No database connection'); 
} 

$result = mysql_query("TRUNCATE TABLE 'available_ingredients'");


$db=mysql_select_db('r2bar2'); 
$query='INSERT INTO available_ingredients (drink_name) VALUES ("'.$_POST["drink_name"].'")'; 
$result=mysql_query($query); 
?>

编辑: 下面是生成JSON数组的代码

ArrayList<NameValuePair> j2 = new ArrayList<NameValuePair>();
j2.add("drink_name", "rootbeer")
j2.add("drink_name", "pepsi")

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(my url);
httppost.setEntity(new UrlEncodedFormEntity(j2));
HttpResponse response = httpclient.execute(httppost);
responseText = EntityUtils.toString(response.getEntity())

2 个答案:

答案 0 :(得分:0)

  • TRUNCATE TABLE不需要或想要围绕表名称使用单引号
  • 您没有向我们展示$_POST完全包含的内容,因此我们无法说明究竟发生了什么
  • 代码将用户提供的数据嵌入到SQL中而不进行清理,因此很容易受到SQL注入攻击

你应养成从你调用错误的函数中检查所有返回值的习惯(就像你已经使用mysql_connect一样);这将导致您发现为什么TRUNCATE TABLE立即失败。

答案 1 :(得分:0)

使用json_decode查看PHP如何接收json对象。在Android方面,你应该只使用你的json数据发送一个变量。

即。 data ='... json string goes here ..'(伪代码,因为我不知道你是如何在android中做的。想法是你要向PHP发送1个键/值,键是数据,并且值是json字符串中的所有值。)

然后在PHP中,如果你通过POST发送,那么你可以这样得到它:

注意,删除truncate table查询,正如其他人提到的那样,它正在擦除整个表。

此代码应该回答您的主要问题。

<?php
// decode json string
$data = json_decode($_POST['data']);

// sanitize your input to avoid sql injection like others have mentioned
$safe_drink_name = mysql_real_escape_string($data->drink_name);

.... // your mysql connect code

$query='INSERT INTO available_ingredients (drink_name) VALUES ("'.$safe_drink_name.'")'; 
?>