【问题标题】:How to get data from a MySQL database in PHP? [duplicate]如何在 PHP 中从 MySQL 数据库中获取数据? [复制]
【发布时间】:2017-04-13 20:34:17
【问题描述】:

这是我为从 MySQL 数据库获取数据而编写的 php 脚本,但它给出了后面提到的错误,而且我使用此脚本的应用程序也给出了 timeouterror。

PHP 脚本:

<?php 

 define('HOST','***');
 define('USER','***');
 define('PASS','***');
 define('DB','champion_trial_database');


 $con = mysqli_connect('HOST', 'USER', 'PASS', 'DB');

 $sql ="SELECT * FROM `trial`";

 $r = mysqli_query($con,$sql);

 $res = mysqli_fetch_array($r);

 echo ("name:"+$res);

 mysqli_close($con);

 ?>

使用 volley 库生成 GET 请求的 Main_activity.java 文件如下:

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editTextId;
    private Button buttonGet;
    private TextView textViewResult;

    private ProgressDialog loading;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editTextId = (EditText) findViewById(R.id.editTextId);
        buttonGet = (Button) findViewById(R.id.buttonGet);
        textViewResult = (TextView) findViewById(R.id.textViewResult);

        buttonGet.setOnClickListener(this);
    }

    private void getData() {
        String id = editTextId.getText().toString().trim();
        if (id.equals("")) {
            Toast.makeText(this, "Please enter an id", Toast.LENGTH_LONG).show();
            return;
        }
        loading = ProgressDialog.show(this,"Please wait...","Fetching...",false,false);
        String url = "http://www.champion6346.5gbfree.com/getData.php";
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        StringRequest stringRequest = new StringRequest(Request.Method.GET,url,

                new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                loading.dismiss();
                textViewResult.setText("Name: "+response);
               // showJSON(response);
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                        Log.d("TAG:","Error mode entered  ");
                        error.printStackTrace();
                    }
                });
        requestQueue.add(stringRequest);
    }
    @Override
    public void onClick(View v) {
        getData();
    }
}

这是我尝试运行上述 php 脚本时服务器的错误日志:

[13-Apr-2017 13:43:50 America/Denver] PHP Warning:  mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/champion6346/public_html/getData.php on line 9
[13-Apr-2017 13:43:50 America/Denver] PHP Warning:  mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/champion6346/public_html/getData.php on line 9
[13-Apr-2017 13:43:50 America/Denver] PHP Warning:  mysql_query(): Access denied for user ''@'localhost' (using password: NO) in /home/champion6346/public_html/getData.php on line 14
[13-Apr-2017 13:43:50 America/Denver] PHP Warning:  mysql_query(): A link to the server could not be established in /home/champion6346/public_html/getData.php on line 14
[13-Apr-2017 13:43:50 America/Denver] PHP Warning:  mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/champion6346/public_html/getData.php on line 16
[13-Apr-2017 13:43:50 America/Denver] PHP Warning:  mysql_close() expects parameter 1 to be resource, boolean given in /home/champion6346/public_html/getData.php on line 20

【问题讨论】:

  • 老兄,您刚刚在互联网上发布了您的数据库的用户名和密码。 立即更改您的密码。
  • 您还混合了mysql 和mysqli 函数。
  • 把mysql改成mysqli;你不能像那样回显结果!

标签: php android


【解决方案1】:

在这种情况下,我还要确保 db 主机名确实解析为某个 IP 地址(例如 ping 主机名或使用 dig/nslookup 工具)。如果主机名不能解决这就是确切的问题。否则我会跟踪代码或使用网络嗅探器(wireshark、tdpdump 等)来确定 PHP 代码是否理解您的需求并确实连接到您指定的主机名。 由于评分低无法发表评论,因此回答。

【讨论】:

    【解决方案2】:

    以下是一些适用于您的 php 代码的修复

    <?php 
    
     define('HOST','****');
     define('USER','****');
     define('PASS','****');
     define('DB','champion_trial_database');
    
    
     $con = mysqli_connect(HOST, USER, PASS, DB);
    
     $sql ="SELECT * FROM trial";
    
     $r = mysqli_query($con,$sql);
    
     while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
     echo "name:".$row['columnname'];
    }
    
     mysqli_close($con);
    
     ?>
    

    columnname 是列的名称,您查找值。你应该调整它。

    更新

    您也有连接问题,要解决这个问题,这个答案可能会有所帮助https://stackoverflow.com/a/35608572

    解决连接问题后,上面的代码应该可以满足您的需求。

    【讨论】:

    • 问题是,他甚至没有显示结果。错误显示他无法连接
    • @Really-Brad-Larson 谢谢,更新了我的答案
    • 实际上问题是我已经编写了一个简单地与服务器连接并显示一个简单的 php 脚本的代码,如下所示:&lt;?php echo"Hello from server" ?&gt; 。代码有时有效,有时无效。所以,我不确定我的服务器是否有问题或其他问题。 @Ozgur @user4925913
    • @Champion6346 你试过我的回答了吗?因为您的问题 mysqli_connect 语法错误。常量不应被单引号覆盖。否则出现getaddr failed错误是正常的。除了您有更多语法错误之外,它们已在我的答案中得到修复。如果你有任何错误,你能试着在这里写吗?
    • @Ozgur 我试过你的代码,但它给出了同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多