2017-02-02 10 views
0

私は以下の3つのコードセットがあり、最初は私のアンドロイド/ iphoneアプリで使用している現在のコードです。最初のPHPコードはデータベースを読み込み、jsonエンコード配列を返します。すべてがうまくいく。私がする必要があるのは、バインド変数を使用してprepareを使用し、bindを使用する以外は同じjson配列を返すことです。行を制限する変数。 2番目はバインド変数を使用しようとしたが、最初のjson配列ではなくデータを返す。 3番目は私の最後の試みでしたが、それは本当の完全な配列を返します。私はバインド変数を追加しようとしていますか?ここで私のmysqlステートメントに

基本的に最初のバインドを使用して同じjsonデータを返すことを許可する必要があります。

おかげ

のerror_log( "\ N \ N ####################### 1 ########## ########### "、3、" master.log ");

$sqlvalue1 = "A"; 

    if ($what_to_do == "select_push_groups") 
    { 
     $empty=array(); 

     $sql = "select email from users "; 

     error_log("\n select_sql: " . $sql ,3,"master.log"); 

     if ($stmt_s = mysqli_prepare($conn, $sql)) 
     { 
     //mysqli_stmt_bind_param($stmt_s, 's',$sqlvalue1); 
       mysqli_stmt_execute($stmt_s); 
       mysqli_stmt_store_result($stmt_s); 
     } 
     else 
     { 
       error_log("\n select prepare error: " . mysqli_errno($conn) . "-" . mysqli_error($conn) ,3,"android_post_array.log"); 
       $resultArray = array(array("success" => "NO", "message" => mysqli_errno($conn) . " " . mysqli_error($conn) , "count" => 0)); 
       echo json_encode(array('success'=>$resultArray)); 
       //exit; 
     } 

     $result = mysqli_query($conn, $sql); 
     if (mysqli_num_rows($result) == 0) 
     { 
      //$resultArray = array(array("success" => "YES", "message" => "empty", "count" => 0)); 
      //echo json_encode(array('success'=>$resultArray)); 
      echo json_encode(array('result'=>$empty)); 
     } 
     if (mysqli_num_rows($result) > 0) 
     { 
      $resultArray = array(); 
      $tempArray = array(); 

      while($row = $result->fetch_object()) 
      { 
       $tempArray = $row; 
       //echo $row->id; 
       array_push($resultArray, $tempArray); 
       //error_log("\n select tempArray : " . print_R($tempArray,TRUE) ,3,"master.log"); 
      } 
      error_log("\n select resultArray : " . print_R($resultArray,TRUE) ,3,"master.log"); 
      error_log("\n select json_encode : " . json_encode($resultArray) ,3,"master.log"); 

      //echo json_encode($resultArray); 
      //echo json_encode(array('result'=>$resultArray)); 
     } 
     //mysqli_close($conn); 
     //exit; 
    } 



    error_log("\n\n #######################  2  ################################" ,3,"master.log"); 





if ($what_to_do == "select_push_groups") 
{ 

    $cnt = ""; 
    $empty=array(); 

     $sqlvalue1 = "8"; 

    $sql = "select 
     id as column1, 
     code as column2 
     from push_groups where id > ? "; 

    if ($stmt_sql = mysqli_prepare($conn, $sql)) 
    { 
     mysqli_stmt_bind_param($stmt_sql, 's',$sqlvalue1); 
     mysqli_stmt_execute($stmt_sql); 
     mysqli_stmt_store_result($stmt_sql); 

     $cnt = mysqli_stmt_num_rows($stmt_sql); 
     if ($cnt == 0) 
      { 
      error_log("\n cnt=0 : " . $cnt ,3,"master.log"); 
        echo json_encode(array('result'=>$empty)); 
      } 
     if ($cnt > 0) 
      { 
      error_log("\n cnt>0 : " . $cnt ,3,"master.log");    
      mysqli_stmt_bind_result($stmt_sql, $id, $code); 
      while (mysqli_stmt_fetch($stmt_sql)) 
      { 
       error_log("\n cnt>0 : " . $id . " " . $code ,3,"master.log"); 
      } 
      } 
    } 
     else 
     { 
       error_log("\n select prepare error: " . mysqli_errno($conn) . "-" . mysqli_error($conn) ,3,"master.log"); 
       $resultArray = array(array("success" => "NO", "message" => mysqli_errno($conn) . " " . mysqli_error($conn) , "count" => 0)); 
       echo json_encode(array('success'=>$resultArray)); 
       exit; 
     } 

} 



    error_log("\n\n ####################### 3  ################################" ,3,"master.log"); 





if ($what_to_do == "select_push_groups") 
{ 

    $cnt = ""; 
    $empty=array(); 

     $sqlvalue1 = "8"; 

    $sql = "select 
     id as column1, 
     code as column2 
     from push_groups where id > ? "; 

    if ($stmt_sql = mysqli_prepare($conn, $sql)) 
    { 
     mysqli_stmt_bind_param($stmt_sql, 's',$sqlvalue1); 
     mysqli_stmt_execute($stmt_sql); 
     mysqli_stmt_store_result($stmt_sql); 

     $cnt = mysqli_stmt_num_rows($stmt_sql); 
     if ($cnt == 0) 
      { 
      error_log("\n cnt=0 : " . $cnt ,3,"master.log"); 
        echo json_encode(array('result'=>$empty)); 
      } 
     if ($cnt > 0) 
      { 
      error_log("\n cnt>0 : " . $cnt ,3,"master.log");      
      $resultArray = array(); 
        $tempArray = array(); 

        while($row = mysqli_stmt_fetch($stmt_sql)) 
        { 
         $tempArray = $row; 
         //echo $row->id; 
       //error_log("\n row->id : " . $row->id ,3,"master.log"); 
         array_push($resultArray, $tempArray); 
         error_log("\n select tempArray : " . print_R($tempArray,TRUE) ,3,"master.log"); 
        } 
        error_log("\n select resultArray : " . print_R($resultArray,TRUE) ,3,"master.log"); 
        error_log("\n select json_encode : " . json_encode($resultArray) ,3,"master.log"); 

        //echo json_encode($resultArray); 
        echo json_encode(array('result'=>$resultArray)); 
      } 
      mysqli_close($conn); 
      exit; 
    } 
     else 
     { 
       error_log("\n select prepare error: " . mysqli_errno($conn) . "-" . mysqli_error($conn) ,3,"master.log"); 
       $resultArray = array(array("success" => "NO", "message" => mysqli_errno($conn) . " " . mysqli_error($conn) , "count" => 0)); 
       echo json_encode(array('success'=>$resultArray)); 
       exit; 
     } 

} 

答えて

-1

mySQLでは、LIMITでバインドされた変数を使用することはできません。

ストアドプロシージャを作成し、この方法で「限度額」を渡す必要があります。

+1

私は「選択的に」制限したい(キーワードの制限ではなく、セット1のバインド変数を使用してjson配列を返す) –

+0

OPクエリには 'LIMIT 'キーワードでは、OPクエリは' WHERE'節のバインドプレースホルダを使用しています – spencer7593

0

mysqli_stmt_fetchはブール値を返します。その機能はmysqli_stmt_bind_resultの後にのみ使用され、コードは部分的に### 2 ###となっています。

### 3 ###の部分には、mysqli_stmt_bind_resultがありません。

プリペアドステートメントを使用して、結果をバインドせずにステートメントにバインドパラメータを指定できます。連想配列を返すには、fetch_arrayを使用してください。

$sqlvalue1 = "8"; 

if ($what_to_do == "select_push_groups") 
{ 
    $resultArray = array(); 
    $sql = "select id as column1, code as column2 from push_groups where id > ? "; 
    if ($stmt_sql = mysqli_prepare($conn, $sql)) 
    { 
     mysqli_stmt_bind_param($stmt_sql, 's', $sqlvalue1); 
     mysqli_stmt_execute($stmt_sql); 
     mysqli_stmt_store_result($stmt_sql); 
     while($row = mysqli_fetch_array($stmt_sql,MYSQLI_ASSOC)) 
     { 
      $resultArray[] = $row; 
     } 
     echo json_encode(array('result'=>$resultArray)); 
     mysqli_stmt_free_result($stmt_sql); 
     mysqli_close($conn); 
     exit; 
    } 
    else 
    { 
     error_log("\n select prepare error: " . mysqli_errno($conn) . "-" . mysqli_error($conn) ,3,"master.log"); 
     $resultArray = array(array("success" => "NO", "message" => mysqli_errno($conn) . " " . mysqli_error($conn) , "count" => 0)); 
     echo json_encode(array('success'=>$resultArray)); 
     mysqli_close($conn); 
     exit; 
    } 
} 

私はバインドパラメータで問題を抱えていたと思った場合、私はそれがmysql_stmt_bind_paramせずに作業になるだろう。テストの場合は、SQLテキストの疑問符の代わりにリテラルを指定し、bind_paramの呼び出しをコメントアウトします。

私はそれをうまく動作させてテストした後、戻ってプレースホルダー?をSQLテキストに追加し、bind_paramを追加します。

+0

バインドのために行が見つかった場合は空の配列を返すので、whileロジックを実行する前に行数を取得する必要があります –

+0

** ' array( 'result' => $ resultArray) '**は、' $ resulttArray'が初期化されているので、** 'array( 'result' => $ emtpy)' **と全く同じものを返します空の配列です( '$ empty'配列の宣言は不要です)。「返された行がない」という特別な処理の必要はありません。 – spencer7593

関連する問題