如何将SQL连接传递到另一个php
我正在尝试制作一个非常基本的android应用程序,可以连接到mysql服务器并进行查询。我已经做了第一页,需要主机,用户,名称和密码。然后,我使用POST方法将这些输入传递给一个php脚本(称为conn.php)。如果建立了mysql连接,将显示一个弹出窗口,显示“成功”,否则将显示错误。现在,我被困在这里。现在我想,一旦我提供了主机、用户名和密码并建立了连接,我也想在另一个php脚本中使用相同的连接,该脚本将对连接进行查询 这是我的conn.php如何将SQL连接传递到另一个php,php,android,mysql,Php,Android,Mysql,我正在尝试制作一个非常基本的android应用程序,可以连接到mysql服务器并进行查询。我已经做了第一页,需要主机,用户,名称和密码。然后,我使用POST方法将这些输入传递给一个php脚本(称为conn.php)。如果建立了mysql连接,将显示一个弹出窗口,显示“成功”,否则将显示错误。现在,我被困在这里。现在我想,一旦我提供了主机、用户名和密码并建立了连接,我也想在另一个php脚本中使用相同的连接,该脚本将对连接进行查询 这是我的conn.php <?php $host
<?php
$host=$_POST["host"];
$user=$_POST["user"];
$pass=$_POST["pass"];
$sql=new mysqli($host,$user,$pass);
if($sql->connect_error)
echo "Failed: ".$sql->connect_error;
else{
echo "Success";
}
?>
这是我的Android任务
class ConnectSqlDb extends AsyncTask<String, Void, String> {
ProgressDialog waitDialog;
@Override
protected void onPreExecute() {
waitDialog=ProgressDialog.show(MainActivity.this,"Connecting to MySQLServer","Please wait...",true,false);
}
@Override
protected String doInBackground(String... params) {
URL url=null;
HttpURLConnection connection=null;
OutputStream os;
BufferedWriter writer;
StringBuilder parameter=new StringBuilder();
try {
parameter.append(URLEncoder.encode("host", "UTF-8"));
parameter.append("=");
parameter.append(URLEncoder.encode(params[1], "UTF-8"));
parameter.append("&");
parameter.append(URLEncoder.encode("user", "UTF-8"));
parameter.append("=");
parameter.append(URLEncoder.encode(params[2], "UTF-8"));
parameter.append("&");
parameter.append(URLEncoder.encode("pass", "UTF-8"));
parameter.append("=");
parameter.append(URLEncoder.encode(params[3], "UTF-8"));
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
url = new URL(params[0]);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
os=connection.getOutputStream();
writer=new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
writer.write(parameter.toString());
writer.flush();
writer.close();
BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream()));
String message=br.readLine();
br.close();
return message;
}catch (MalformedURLException e){
e.printStackTrace();
return null;
}
catch ( IOException e){
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(String message) {
waitDialog.dismiss();
Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
}
}
public void connect(View v){
String server=phpserver.getText().toString();
String hostname=host.getText().toString();
String username=user.getText().toString();
String password=pass.getText().toString();
new ConnectSqlDb().execute(server,hostname,username,password);
}
类ConnectSqlDb扩展异步任务{
进展对话;
@凌驾
受保护的void onPreExecute(){
waitDialog=ProgressDialog.show(MainActivity.this,“连接到MySQLServer”,“请稍候…”,true,false);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
URL=null;
HttpURLConnection=null;
输出流;
缓冲写作者;
StringBuilder参数=新的StringBuilder();
试一试{
parameter.append(URLEncoder.encode(“主机”,“UTF-8”);
参数。追加(“=”);
parameter.append(URLEncoder.encode(params[1],“UTF-8”);
参数。追加(&);
parameter.append(URLEncoder.encode(“用户”、“UTF-8”);
参数。追加(“=”);
parameter.append(URLEncoder.encode(params[2],“UTF-8”);
参数。追加(&);
parameter.append(URLEncoder.encode(“pass”、“UTF-8”);
参数。追加(“=”);
parameter.append(URLEncoder.encode(params[3],“UTF-8”);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
试一试{
url=新url(参数[0]);
connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.setDoOutput(真);
os=connection.getOutputStream();
writer=new BufferedWriter(新的OutputStreamWriter(os,“UTF-8”));
writer.write(parameter.toString());
writer.flush();
writer.close();
BufferedReader br=新的BufferedReader(新的InputStreamReader(connection.getInputStream());
字符串消息=br.readLine();
br.close();
返回消息;
}捕获(格式错误){
e、 printStackTrace();
返回null;
}
捕获(IOE异常){
e、 printStackTrace();
返回null;
}
}
@凌驾
受保护的void onPostExecute(字符串消息){
waitDialog.discouse();
Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
}
}
公共连接(视图五){
String server=phpserver.getText().toString();
字符串hostname=host.getText().toString();
字符串username=user.getText().toString();
字符串密码=pass.getText().toString();
新建ConnectSqlDb().execute(服务器、主机名、用户名、密码);
}
如果我做错了,那么还有什么办法呢?好的,如果您只需要一个连接,请使用singleton类(参见singleton模式)。 定义一个连接类,如下所示,
DBConnection.php
class DBConnection{
protected static $db;
private function __construct() {
try {
$host:"myhost";
$user:"myuser";
$pass:"mypass";
self::$db = $sql=new mysqli($host,$user,$pass);
}
catch (Exception $e) {
//..........
}
}
public static function getInstance() {
if (!self::$db) {
new DBConnection();
}
return self::$db;
}
public function __destruct() {
$db=NULL;
}
}
注意:在PHP中,创建此类对象,并在创建此类对象时将从POST获得的值传递给此类。
在PHP文件中,执行类似于conn.php
include "DBConnection.php";
//$host=$_POST["host"];
//$user=$_POST["user"];
//$pass=$_POST["pass"];
//$db = new DBConnection($host,$user,$pass);
$db = new DBConnection();
$connection = $db->getInstance();
是否要确保只有一个DB连接?我的意思是你想确保在运行多个php和多个查询时只建立一个连接???是的。一旦建立,我只想使用一个连接。我希望这个连接在另一个php文件中可用,我可以在其中进行查询,这样一旦建立连接,我就不再需要那些变量$host、$user、$pass。假设我想显示数据库列表,稍后我将创建表并使用它们。我怎样才能做到呢?好的,你们明白了,等等,你们可以在php端使这些变量保持静态。现在让我看一看类中的代码,连接凭证是静态的,现在您可以使用相同的代码将该类中的连接实例获取到任何PHP文件和列表数据库中。您可以将凭据定义为类成员变量并使用$this关键字。我可以在php类中使用POST方法从用户端获取连接凭据吗?我想从用户端得到这些凭证。不,你怎么能,你需要调用一些从android到PHP类的方法。因此,要使用post,您需要将构造函数或任何其他setter方法传递给连接类。在类中定义成员属性,并使用setter方法设置凭据,然后使用这些成员变量来获取连接。我需要考虑你的要求,根据你的要求得到更好的解决方案。