2013-08-23 6 views
1

행의 ID를 사용하여 데이터베이스 테이블 "cond"에서 한 행을 읽으려고합니다. 이 경우 ID = 1 인 행 하나만 있습니다. 문제는이 코드가 항상 $ 결과가 비어 있음을 반환한다는 것입니다. 나는 그것을 오랫동안 고치려고 노력해 왔고 PDO 나 mysqli로도 시도했지만 코딩에 대한 지식은 실제로 제한적입니다. 행을 올바르게 읽으려면 어떻게해야합니까?mysql 쿼리가 항상 빈 결과를 반환하는 이유는 무엇입니까?

이 내 PHP 코드 :

$response = array(); 
require_once __DIR__ . '/db_connect.php'; 
$db = new DB_CONNECT();  
if (isset($_GET["pid"])) { 
$pid = $_GET['pid']; 
$result = mysql_query("SELECT *FROM cond WHERE id = $pid"); 

if (!empty($result)) { 
    if (mysql_num_rows($result) > 0) { 

     $result = mysql_fetch_array($result); 

     $product = array(); 
     $product["id"] = $result["id"]; 
     $product["name"] = $result["name"]; 
     $product["mon"] = $result["mon"]; 
     $product["tue"] = $result["tue"]; 
     $product["wed"] = $result["wed"]; 
     $product["thu"] = $result["thu"]; 
     $product["fri"] = $result["fri"]; 
     $product["sat"] = $result["sat"]; 
     $product["sun"] = $result["sun"]; 
     $product["version"]=$result["version"]; 

     // success 
     $response["success"] = 1; 

     // user node 
     $response["product"] = array(); 

     array_push($response["product"], $product); 

     // echoing JSON response 
     echo json_encode($response); 
    } else { 
     // no product found 
     $response["success"] = 0; 
     $response["message"] = "No product found. Result=0"; 

     // echo no users JSON 
     echo json_encode($response); 
    } 
} else { 
    // no product found 
    $response["success"] = 0; 
    $response["message"] = "No product found.Result=empty"; 

    // echo no users JSON 
    echo json_encode($response); 
} 
} else { 
// required field is missing 
$response["success"] = 0; 
$response["message"] = "Required field(s) is missing"; 

// echoing JSON response 
echo json_encode($response); 
} 
?> 

그리고 이것은 자바 코드 :

List<NameValuePair> params2 = new ArrayList<NameValuePair>(); 
params2.add(new BasicNameValuePair("pid", "1")); 
JSONObject json = jsonParser.makeHttpRequest(url_product_detials, "GET", params2); 
Log.d("Single Product Details", json.toString()); 

감사합니다!

편집

: 내가 다음 코드를 업로드 PDO를 사용하도록 제안 된 후 PDO

을 제안 사용 :

<?php 

$id=$_POST["pid"]; 


try { 
require_once 'conf.php'; 
$conn = mysqlConnector(); 
$stmt = $conn->prepare('SELECT * FROM cond WHERE id = :id'); 
$stmt->execute(array('id' => $id)); 
$result = $stmt->fetchAll(); 

if (count($result)) { 
foreach($result as $row) { 
    echo json_encode($result); 

}} else { 
echo "No rows returned."; 
} 
} catch(PDOException $e) { 
echo 'ERROR: ' . $e->getMessage(); 
} 
?> 

을하지만 지금은이 오류를 얻을 : 그래서

Error parsing data org.json.JSONException: End of input at character 0 of 
threadid=12: thread exiting with uncaught exception (group=0x40cd7930) 
FATAL EXCEPTION: AsyncTask #1 
java.lang.RuntimeException: An error occured while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:299) 
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
at java.lang.Thread.run(Thread.java:856) 
Caused by: java.lang.NullPointerException 
at com.goout.ListClubs$GetProductDetails.doInBackground(ListClubs.java:456) 
at com.goout.ListClubs$GetProductDetails.doInBackground(ListClubs.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:287) 
at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
... 4 more 
    Activity com.goout.ListClubs has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{410fb410 V.E..... R......D 0,0-480,144} that was originally added here 
    android.view.WindowLeaked: Activity com.goout.ListClubs has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{410fb410 V.E..... R......D 0,0-480,144} that was originally added here 
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354) 
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
at android.app.Dialog.show(Dialog.java:281) 
at com.goout.ListClubs$GetProductDetails.onPreExecute(ListClubs.java:435) 
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
at android.os.AsyncTask.execute(AsyncTask.java:534) 
at com.goout.ListClubs.onCreate(ListClubs.java:87) 
at android.app.Activity.performCreate(Activity.java:5104) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
at android.app.ActivityThread.access$600(ActivityThread.java:153) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5227) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
at dalvik.system.NativeStart.main(Native Method) 

을 PHP 코드가 잘못된 것 같아요?

+0

에서

$mysqli = new mysqli("localhost", "username", "password", "cond"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } if ($result = $mysqli->query("SELECT *FROM table_name WHERE id = $pid")) { /* determine number of rows result set */ $row_cnt = $result->num_rows; if ($row_cnt>0) { while ($row = $result->fetch_row()) { $product = array(); $product["id"] = $result["id"]; $product["name"] = $result["name"]; $product["mon"] = $result["mon"]; $product["tue"] = $result["tue"]; $product["wed"] = $result["wed"]; $product["thu"] = $result["thu"]; $product["fri"] = $result["fri"]; $product["sat"] = $result["sat"]; $product["sun"] = $result["sun"]; $product["version"]=$result["version"]; // success $response["success"] = 1; // user node $response["product"] = array(); array_push($response["product"], $product); // echoing JSON response echo json_encode($response); } } else { // no product found $response["success"] = 0; $response["message"] = "No product found. Result=0"; // echo no users JSON echo json_encode($response); /* close result set */ } $result->close(); } 

다음은 [SQL 주입 공격]에 취약 시도 (http://bobby-tables.com). –

+0

다음을 추가 할 수 있습니까? $ query = "SELECT * FROM cond WHERE id = $ pid"; echo $ query; 결과를 게시 하시겠습니까? 그냥 당신이 pid 당신이 무엇을 기대하고 있는지 확인합니다. – user2588667

답변

2

빈 응답은 쿼리에 오류가 있음을 의미합니다.

Mysql은 명시 적으로 요청하지 않는 한 오류가 무엇인지 알려주지 않습니다. 따라서 서버와 상호 작용하는 모든 mysql 함수의 결과를 항상 확인하고 결과가 거짓 인 경우 - mysql_error()을 확인하십시오.

또한 오래된 MySQL 라이브러리를 사용하고 있습니다. 종료하고 PDO를 사용하십시오. PDO에는 주석 오류보고 기능이 내장되어 있습니다.

+0

제안 된대로 PDO를 사용하려고했습니다. 하지만 지금은 다른 오류가 발생했습니다 –

+0

이것은 자바 예외입니다. PHP와 java 사이에 어떤 인터페이스가 있습니까? –

+0

PHP 코드가 수정되었고 현재 작동합니다. 도움을 주셔서 감사합니다 –

0

당신은 데이터베이스 이름이 cond라고 말했습니다. 그렇다면 데이터베이스의 테이블 이름은 무엇입니까? mysql_ *은 (는) 더 이상 사용되지 않습니다. (가) http://php.net/manual/en/mysqli-result.num-rows.php

+0

답변이 설명서 페이지에서 직접 복사되었으므로 잘못된 quaqlity 답변으로 간주되는 포스터의 코드와 관련이 없습니다. –

+0

내 의도는 쿼리에서 테이블 이름 대신 데이터베이스 이름을 사용하고 mysql_ * 대신 mysqli를 사용할 것을 제안하는 것이 었습니다. 그렇다면 PHP 매뉴얼에서 링크를 통해 줄 수를 얻는 방법에 대해 올렸습니다. 링크를 사용하면 변경할 수있는 코드가 있습니다. 그럼에도 불구하고 나는 지금 그의 질문에 완전히 일치하는 코드를 작성했다. –

관련 문제