无法通过PHP连接到mysql数据库

时间:2013-01-15 16:27:36

标签: php mysql

最后,我完全按照此页面(connecting android apps to mysql database)创建一个应用程序。 更改为10.0.2.2后,提问者最终可以连接到mysql,但我不能。 我的代码出了什么问题? 我可以在浏览器上使用localhost获取数据 - firefox。

我从differenet教程中获得的一些问题可以解决问题但不适合我:

  1. 我是否还要将PHP脚本中的主机更改为10.0.2.2
  2. 我需要添加用户权限 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  3. 我已经使用了具有相同API=17
  4. 的模拟器

    这是我的PHP代码

    mysql_connect("10.0.2.2","root","password");
    mysql_select_db("mydbname");
    $q=mysql_query("SELECT * FROM people
    WHERE
    birthyear>'".$_REQUEST['year']."'");
    while($e=mysql_fetch_assoc($q))
     $output[]=$e;
    print(json_encode($output));
    mysql_close();
    

    我的SQL查询

    CREATE TABLE `people` (
     `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
     `name` VARCHAR( 100 ) NOT NULL ,
     `sex` BOOL NOT NULL DEFAULT '1',
    `birthyear` INT NOT NULL 
      )
    

    android中的代码

    package com.example.peoplework;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Main extends Activity {
    
    InputStream is;
    private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String result = "";
        //the year data to send
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("year","1990"));
    
        //http post
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://10.0.2.2/index.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost); 
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                Log.e("log_tag", "connection success ");
                Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
                Toast.makeText(getApplicationContext(), "fail1", Toast.LENGTH_SHORT).show();
    
        }
        //convert response to string
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                        Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
                }
                is.close();
    
                result=sb.toString();
        }catch(Exception e){
               Log.e("log_tag", "Error converting result "+e.toString());
            Toast.makeText(getApplicationContext(), "fail2", Toast.LENGTH_SHORT).show();
    
        }
    
        //parse json data
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                       JSONObject json_data = jArray.getJSONObject(i);
                        Log.i("log_tag","id: "+json_data.getInt("id")+
                                ", name: "+json_data.getString("name")+
                                ", sex: "+json_data.getInt("sex")+
                                ", birthyear: "+json_data.getInt("birthyear")
                        );
                        Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
               }
                tv = (TextView)findViewById(R.id.get_record);
                tv.setText(jArray.toString());
    
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
                Toast.makeText(getApplicationContext(), "fail3", Toast.LENGTH_SHORT).show();
        }
    }
    
    }
    

    清单

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.peoplework"
    android:versionCode="1"
    android:versionName="1.0" >
    
    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.peoplework.Main"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    

    和log ,,错误是粗体。

    01-15 15:29:34.805: D/AndroidRuntime(1741): >>>>>> AndroidRuntime START   com.android.internal.os.RuntimeInit <<<<<<
    01-15 15:29:34.805: D/AndroidRuntime(1741): CheckJNI is ON
    01-15 15:29:34.825: D/dalvikvm(1741): Trying to load lib libjavacore.so 0x0
    01-15 15:29:34.835: D/dalvikvm(1741): Added shared lib libjavacore.so 0x0
    01-15 15:29:34.845: D/dalvikvm(1741): Trying to load lib libnativehelper.so 0x0
    01-15 15:29:34.845: D/dalvikvm(1741): Added shared lib libnativehelper.so 0x0
    01-15 15:29:35.305: D/AndroidRuntime(1741): Calling main entry com.android.commands.pm.Pm
    01-15 15:29:35.315: D/AndroidRuntime(1741): Shutting down VM
    01-15 15:29:35.326: D/dalvikvm(1741): GC_CONCURRENT freed 100K, 19% free 470K/576K, paused 1ms+1ms, total 8ms
    01-15 15:29:35.326: D/dalvikvm(1741): Debugger has detached; object registry had 1 entries
    01-15 15:29:35.795: D/AndroidRuntime(1754): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
    01-15 15:29:35.795: D/AndroidRuntime(1754): CheckJNI is ON
    01-15 15:29:35.815: D/dalvikvm(1754): Trying to load lib libjavacore.so 0x0
    01-15 15:29:35.825: D/dalvikvm(1754): Added shared lib libjavacore.so 0x0
    01-15 15:29:35.835: D/dalvikvm(1754): Trying to load lib libnativehelper.so 0x0
    01-15 15:29:35.835: D/dalvikvm(1754): Added shared lib libnativehelper.so 0x0
    01-15 15:29:36.305: D/AndroidRuntime(1754): Calling main entry com.android.commands.am.Am
    01-15 15:29:36.305: D/dalvikvm(1754): Note: class Landroid/app/ActivityManagerNative; has 156 unimplemented (abstract) methods
    01-15 15:29:36.325: I/ActivityManager(263): Force stopping package com.example.peoplework appid=10047 user=-1
    01-15 15:29:36.325: I/ActivityManager(263): Killing proc  1726:com.example.peoplework/u0a10047: force stop com.example.peoplework
    01-15 15:29:36.325: W/ActivityManager(263): Force removing ActivityRecord{2c4b7b80 u0 com.example.peoplework/.Main}: app died, no saved state
    01-15 15:29:36.375: I/WindowState(263): WIN DEATH: Window{2c6ce6e8 u0 com.example.peoplework/com.example.peoplework.Main}
    01-15 15:29:36.415: I/ActivityManager(263): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.peoplework/.Main} from pid 1754
    01-15 15:29:36.435: D/AndroidRuntime(1754): Shutting down VM
    01-15 15:29:36.446: D/dalvikvm(1754): GC_CONCURRENT freed 101K, 18% free 504K/608K, paused 0ms+1ms, total 8ms
    01-15 15:29:36.446: D/jdwp(1754): Got wake-up signal, bailing out of select
    01-15 15:29:36.446: D/dalvikvm(1754): Debugger has detached; object registry had 1 entries
    01-15 15:29:36.515: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
    01-15 15:29:36.526: I/Choreographer(394): Skipped 33 frames!  The application may be doing too much work on its main thread.
    **01-15 15:29:36.675: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property**
    01-15 15:29:36.696: D/dalvikvm(1765): Not late-enabling CheckJNI (already on)
    01-15 15:29:36.715: I/ActivityManager(263): Start proc com.example.peoplework for activity com.example.peoplework/.Main: pid=1765 uid=10047 gids={50047, 3003, 1028}
    01-15 15:29:36.725: W/InputMethodManagerService(263): Got RemoteException sending setActive(false) notification to pid 1726 uid 10047
    **01-15 15:29:36.985: E/Trace(1765): error opening trace file: No such file or directory (2)**
    01-15 15:29:37.005: W/ActivityThread(1765): Application com.example.peoplework is waiting for the debugger on port 8100...
    01-15 15:29:37.036: I/System.out(1765): Sending WAIT chunk
    01-15 15:29:37.045: I/dalvikvm(1765): Debugger is active
    01-15 15:29:37.234: I/System.out(1765): Debugger has connected
    01-15 15:29:37.234: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:37.374: I/Choreographer(263): Skipped 34 frames!  The application may be doing too much work on its main thread.
    01-15 15:29:37.435: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:37.594: I/Choreographer(263): Skipped 55 frames!  The application may be doing too much work on its main thread.
    01-15 15:29:37.604: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
    01-15 15:29:37.644: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:37.845: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:38.045: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:38.270: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:38.490: I/System.out(1765): waiting for debugger to settle...
    01-15 15:29:38.720: I/System.out(1765): debugger has settled (1359)
    01-15 15:29:39.845: D/dalvikvm(1765): threadid=1: still suspended after undo (sc=1 dc=1)
    01-15 15:29:46.436: W/ActivityManager(263): Launch timeout has expired, giving up wake lock!
    01-15 15:29:46.948: W/ActivityManager(263): Activity idle timeout for ActivityRecord{2c9fdd70 u0 com.example.peoplework/.Main}
    01-15 15:30:51.805: I/InputDispatcher(263): Application is not responding: AppWindowToken{2c96db20 token=Token{2c9f1af8 ActivityRecord{2c9fdd70 u0 com.example.peoplework/.Main}}}.  It has been 5031.2ms since event, 5030.0ms since wait started.  Reason: Waiting because there is no touchable window that can handle the event but there is focused application that may eventually add a new window when it finishes starting up.
    01-15 15:30:51.805: I/WindowManager(263): Input event dispatching timed out sending to application AppWindowToken{2c96db20 token=Token{2c9f1af8 ActivityRecord{2c9fdd70 u0 com.example.peoplework/.Main}}}
    01-15 15:30:56.903: I/InputDispatcher(263): Dropped event because it is stale.
    01-15 15:30:56.905: I/InputDispatcher(263): Dropped event because it is stale.
    01-15 15:30:56.905: I/InputDispatcher(263): Dropped event because it is stale.
    01-15 15:31:30.845: D/AndroidRuntime(1780): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
    01-15 15:31:30.845: D/AndroidRuntime(1780): CheckJNI is ON
    01-15 15:31:30.865: D/dalvikvm(1780): Trying to load lib libjavacore.so 0x0
    01-15 15:31:30.875: D/dalvikvm(1780): Added shared lib libjavacore.so 0x0
    01-15 15:31:30.885: D/dalvikvm(1780): Trying to load lib libnativehelper.so 0x0
    01-15 15:31:30.885: D/dalvikvm(1780): Added shared lib libnativehelper.so 0x0
    01-15 15:31:31.345: D/AndroidRuntime(1780): Calling main entry com.android.commands.pm.Pm
    01-15 15:31:31.365: D/AndroidRuntime(1780): Shutting down VM
    01-15 15:31:31.365: D/dalvikvm(1780): GC_CONCURRENT freed 100K, 18% free 470K/572K, paused 1ms+1ms, total 5ms
    01-15 15:31:31.365: D/dalvikvm(1780): Debugger has detached; object registry had 1 entries
    01-15 15:31:31.834: D/AndroidRuntime(1792): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
    01-15 15:31:31.834: D/AndroidRuntime(1792): CheckJNI is ON
    01-15 15:31:31.864: D/dalvikvm(1792): Trying to load lib libjavacore.so 0x0
    01-15 15:31:31.864: D/dalvikvm(1792): Added shared lib libjavacore.so 0x0
    01-15 15:31:31.884: D/dalvikvm(1792): Trying to load lib libnativehelper.so 0x0
    01-15 15:31:31.884: D/dalvikvm(1792): Added shared lib libnativehelper.so 0x0
    01-15 15:31:32.325: D/AndroidRuntime(1792): Calling main entry com.android.commands.am.Am
    01-15 15:31:32.325: D/dalvikvm(1792): Note: class Landroid/app/ActivityManagerNative; has 156 unimplemented (abstract) methods
    01-15 15:31:32.345: I/ActivityManager(263): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.peoplework/.Main} from pid 1792
    01-15 15:31:32.345: D/AndroidRuntime(1792): Shutting down VM
    01-15 15:31:32.355: D/dalvikvm(1792): GC_CONCURRENT freed 101K, 17% free 501K/604K, paused 0ms+0ms, total 6ms
    01-15 15:31:32.355: D/dalvikvm(1792): Debugger has detached; object registry had 1 entries
    01-15 15:31:37.545: D/dalvikvm(1765): Debugger has detached; object registry had 362 entries
    01-15 15:31:37.545: I/dalvikvm(1765): ignoring registerObject request in thread=1
    01-15 15:31:37.545: I/dalvikvm(1765): ignoring registerObject request in thread=1
    **01-15 15:31:37.585: E/log_tag(1765): Error in http connection android.os.NetworkOnMainThreadException
    01-15 15:31:37.596: E/log_tag(1765): Error converting result  java.lang.NullPointerException: lock == null
    01-15 15:31:37.605: E/log_tag(1765): Error parsing data org.json.JSONException: End of input at character 0 of 
    01-15 15:31:37.775: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
    01-15 15:31:37.875: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property**
    01-15 15:31:37.895: I/Choreographer(1765): Skipped 31 frames!  The application may be doing too much work on its main thread.
    01-15 15:31:37.935: D/gralloc_goldfish(1765): Emulator without GPU emulation detected.
    01-15 15:31:37.995: I/ActivityManager(263): Displayed com.example.peoplework/.Main: +2m1s309ms
    01-15 15:31:39.685: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
    01-15 15:31:41.855: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
    01-15 15:31:42.555: I/Choreographer(263): Skipped 38 frames!  The application may be doing too much work on its main thread.
    : E/(): Device disconnected
    

2 个答案:

答案 0 :(得分:0)

尝试使用此代替PHP代码:

  $link = mysqli_connect("10.0.2.2","root","password","mydbname");
  $q=mysqli_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'");
  while($e=mysqli_fetch_array($q, MYSQL_BOTH))
  $output[]=$e;
  print(json_encode($output));
  mysqli_close($link);

答案 1 :(得分:0)

我遵循本教程,问题解决了。 虽然解释是中文的,但希望它可以帮助解决类似的问题。 谢谢大家的帮助!!!!

Connect to mysql using PHP