2016-04-17 15 views
0

MySQLiクエリを使用してデータを取得しようとしています。 私のSQLクエリを確認してください、私はIf条件でエラーが発生しています。 それはコンソールにMySQLクエリを確認してください

<?php 
    $id = $_GET['id']; 
    include("../include/connection_string.php"); 


    $sql = mysqli_query($db, "SELECT pages, main_id FROM dhms_index_table where main_id='"+$id+"'"); 

    if(mysqli_num_rows($sql)){ // Showing error here " Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result" 
     $data = array(); 
     while($row = mysqli_fetch_array($sql)){ 
      $data[] = array(
       'pages' => $row['pages'], 
       'main_ID' => $row['main_id'] 
      ); 
     } 
     header('Content-type: application/json'); 
     echo json_encode($data); 
    } 
    ?> 

connections_string.php

$server = 'localhost'; 
$username ="root"; 
$passwd =''; 
$Dbase = 'og_dhms'; 
$db = @mysqli_connect($server,$username,$passwd) 
     or die("Could not connect database"); 
@mysqli_select_db($db, $Dbase) 
     or die("Could not select database"); 
+1

前に 'echo mysqli_error();'を追加した場合 –

+0

クエリが失敗したか、接続が正しく行われなかったと思います。 'connection_stringを表示してください。php' – RiggsFolly

+0

また、あなたのPHPエラーログを見て、私たちに完全なエラーメッセージを表示してください – RiggsFolly

答えて

5

このライン

012を表示なっているとき、私は条件

場合の横

でエラーを追加

main_id='"+$id+"' 

は、連結するドットではなく、ドットではなく+を使用しています。これがJS/Cの方法です。多分あなたはそのタイプのバックグラウンドのもので、PHPで使うことができると思っていたかもしれません。 できません。

そう...

main_id='".$id."' 

はまた、あなたが$id = $_GET['id'];の値を持っていることを確認してください。

エラー報告では、エラー通知が表示されます。

GET配列が整数である場合は、(int)を使用することをお勧めします。

$id = (int)$_GET['id']; 

と設定されているかどうかを確認します。

すなわち:

if(isset($_GET['id'])){ 

    $id = (int)$_GET['id']; 

} 

または

if(!empty($_GET['id'])){ 

    $id = (int)$_GET['id']; 

} 
+0

Doh:ちょうど私の眼鏡をきれいにしました....今すぐ飲み物を注ぎ入れて乾杯してください – RiggsFolly

+0

@RiggsFolly * ) –

0

あなたの問題が最も可能性の高い、ここでのクエリ構文エラーによって引き起こされた:

main_id='"+$id+"' 

これにそれを変更するには、問題を解決する必要があります:

main_id='".$id."' 

しかし、フィルタ処理されていないユーザー入力をSQL文で使用しないでください。

<?php 
$id = $_GET['id']; 
include("../include/connection_string.php"); 

if($stmt = mysqli_prepare($db, "SELECT pages, main_id FROM dhms_index_table WHERE main_id = ?")) { 

    mysqli_stmt_bind_param($stmt, 'i', $id); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_store_result($stmt); 

    if(mysqli_stmt_num_rows($stmt) > 0) { 
     mysqli_stmt_bind_result($stmt, $pages, $main_id); 
     $data = array(); 
     while(mysqli_stmt_fetch($stmt)) { 
      $data[] = array(
       'pages' => $pages, 
       'main_ID' => $main_id 
      ); 
     } 
     header('Content-type: application/json'); 
     echo json_encode($data); 
    } 
    mysqli_stmt_free_result($stmt); 
    mysqli_stmt_close($stmt); 
} 
?> 

常にあなたがSQLインジェクションを回避するための書類にユーザーの入力を含めているときプリペアドステートメントを使用してください: 私はこのような何かをするだろう。

ここでそれについて詳しく読む:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

を、私はそれが助けを願っています。

関連する問題