簡體   English   中英

SQL select語句中的語法錯誤

[英]Syntax error in SQL select statement

我正在開發一個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):您的錯誤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;

?>
$query2="select crop_name from crop_master where lang_id=$lang_id";

嘗試將其替換為:

$query2="select crop_name from crop_master where lang_id='$lang_id'";

似乎您正在嘗試檢索crop_name等於$ lang_id(這將是無效的標識符)而不是$ lang_id本身的值的crop_name。

請注意,您可能想閱讀有關SQL Injection Attacks

例如,如果用戶傳入1;DROP TABLE USERS作為LanguageName參數,則將在SQL中執行以下操作:

$query1="select lang_id from lang_selection where lang_name=1;DROP TABLE USERS;

我不確定查詢的語法,但是我知道您最好使用一個查詢而不是兩個查詢。 像這樣:

select crop_name 
from crop_master cm join lang_selection ls on cm.languageid = ls.languageid
where lang_name = '$lang'

如果您不熟悉聯接表,那么我聽說過這本書的好東西,即《 10分鍾內自學SQL》

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM