我正在开发一个Android应用程序。在我的应用程序中,AsyncTask向PHP发送一个字符串。 PHP返回一组作物名称。SQL select语句中的语法错误
我的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):组织。 [email protected] 02-16 22:08:04.216:I/JsonObj(1251):你的SQL语法有错误;检查对应于您的MySQL服务器版本的手册,以在第1行'id#4'附近使用正确的语法。
我不知道我的语法有什么问题。
编辑:使用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;
?>
您的脚本可能容易受到SQL注入。 – Gumbo 2013-02-16 16:45:44
[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并且被正式弃用](http://j.mp/XqV7Lp)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – Eric 2013-02-16 16:46:50
@Eric:thanx指出。我是这个PHP-MySql的新手。现在将学习PDO。 Thanx为教程。 – apatel 2013-02-18 03:51:06