我正在开发一款Android应用。在我的应用程序中,一个AsyncTask将字符串发送到PHP。PHP返回作物名称的数组。
我的PHP文件是:
<?php
ini_set('default_charset', 'utf-8');
header('Content-Type: text/html; charset=UTF-8');
mysql_connect("localhost","root","");
mysql_select_db("farm_o_pedia");
mysql_set_charset('utf8');
$result1 = mysql_query("SET NAMES utf8");
$lang=$_POST['LanguageName'];
$query1="select lang_id from lang_selection where lang_name='$lang'";
$lang_id=mysql_query($query1) or die(mysql_error());
$query2="select crop_name from crop_master where lang_id=$lang_id";
$result2=mysql_query($query2) or die(mysql_error());
while($row=mysql_fetch_assoc($result2))
{
$output[]=$row;
}
print(json_encode($output));
mysql_close();
?>
我在Logcat中遇到了这种错误:
02-16 22:08:04.216: I/HTTP ok(1251): org.apache.http.message.BasicHttpResponse@4052f0b8 02-16 22:08:04.216 : I/JsonObj(1251): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #4' at line 1
我不知道我的语法有什么问题。
编辑:按照建议使用PDO,现在它可以正常工作了: 这是我的新脚本。
<?php
$db = new PDO('mysql:host=localhost;dbname=farm_o_pedia;charset=utf8', 'root', '');
$db->query("SET NAMES utf8");
$lang=$_POST['LanguageName'];
$query1="select crop_name from crop_master where lang_id=(select lang_id from lang_selection where lang_name='$lang')";
$result2=$db->query($query1);
while(($row=$result2->fetch(PDO::FETCH_ASSOC))!=false)
{
$output[]=$row;
}
print(json_encode($output));
$db=null;
?>
mysql_*
函数,它们已经不再维护并被正式弃用。看到红框了吗?相反,学习prepared statements,并使用PDO或MySQLi- 这篇文章将帮助您决定选择哪一个。如果您选择PDO,这里有一个好的教程。 - Cat