我在Java,PHP和MySQL之间有一个奇怪的连接问题.
我无法通过Java直接访问Web服务器上的MySQL数据库.因此,我将机制转换为运行PHP脚本,该脚本为我完成工作并将结果返回给我的Java应用程序.
它对大多数查询都很好.但是当查询包含查询中的字符字段时,我没有得到预期的结果.
我包含PHP和Java代码片段以供参考.
请找我,我做错了…
服务器上的PHP脚本……
$query=$_POST["query"];
echo" Query = ".$query."\n";
if($query){
$link=mysql_connect("mysql2.000webhost.com","a7946109_other","mypassword");
if($link){
mysql_select_db("a7946109_other");
$result=mysql_query($query);
if($result){
while($row=mysql_fetch_row($result)){ // for each row in results
foreach($row as $value){ // for each column in row
echo "\t".$value;
}
echo"\n";
}
}
}else{
echo " MySQL connect failed ! \n";
}
}else{
echo " No Query ! \n";
}
exit(); // exit without auto_append_file
?>
Java程序……
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.applet.*;
import java.security.*;
public class MySQL_POST {
public static void main(String r[]){
HttpURLConnection conn=null;
try{
URL url=new URL("mywebsite.com/postdb.php");
String agent="Applet";
String query="query=" + r[0];
String type="application/x-www-form-urlencoded";
conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", ""+query.length());
OutputStream out=conn.getOutputStream();
out.write(query.getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while((inputLine=in.readLine())!=null){
System.out.print(inputLine+"\n");
};
in.close();
int rc = conn.getResponseCode();
System.out.print("Response Code = "+rc+"\n");
String rm=conn.getResponseMessage();
System.out.print("Response Message = "+rm+"\n");
}catch(Exception e){
e.printStackTrace();
}finally{
conn.disconnect();
}
}
}
我有一个名为TEST的表,其中包含字段SID INT(3),SNAME VARCHAR(20),SLNAME VARCHAR(20)
它在表中有两个条目.
当我使用Java执行以下查询时,我得到不同类型的输出,如下所示.
> java MYSQL_POST "SELECT * FROM TEST"
Query = SELECT * FROM TEST
1 Test1 Test1L
2 Test2 Test2L
Response Code = 200
Response Message = OK
这是我想要的.
> java MYSQL_POST "SELECT SNAME FROM TEST WHERE SID = 1"
Query = SELECT SNAME FROM TEST WHERE SID = 1
Test1
Response Code = 200
Response Message = OK
这也是我的预期.
这是奇怪的.
> java MYSQL_POST "SELECT SID FROM TEST WHERE SNAME = 'Test1'"
Query = SELECT SID FROM TEST WHERE SNAME = \'Test1\'
Response Code = 200
Response Message = OK
这不会导致任何结果,如预期的那样应为1
查询,涉及SNAME =’Test1’等字符或任何其他或不工作的字符.除了这些查询,其他人都没问题.
请有人帮我解决这个问题.
提前致谢.