2017-07-07 4 views
0

数値を受け付けるSQL文をいくつか持ち、その数値がデータベースのカラムの値と等しい場合、データベース内のすべての行を返す必要があります同じ値を持つ。残念ながら行のみ値を持つblog_post_idを返す0Mysqlカラムがユーザ入力と等しいテーブルのすべての値を返します

これは、以下の私のコードです:

<?php 
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
); 
$blog_post_id = !empty($_POST['blog_post_id']) ? $_POST['blog_post_id'] 
: ''; 

$pdo=new PDO("mysql:dbname=db;host=localhost","username","password", 
$options); 
$statement=$pdo->prepare("SELECT * FROM comment WHERE blog_post_id = 
'$blog_post_id'"); 
$statement->execute(); 
$results=$statement->fetchAll(PDO::FETCH_ASSOC); 
$json=json_encode($results); 
if ($json) 
    echo $json; 
else 
    echo json_last_error_msg(); 

?> 
+6

パラメータの使用方法を学びます。パラメータを使用した場合、クエリは機能します。 –

+0

このご質問はお手伝いします。[質問](https://stackoverflow.com/questions/16130698/php-pdo-get-only-one-value-from-mysql-value-that-equals-to-variable) –

+0

条件のために '{} 'を使用し、コードを読みやすくするためにパラメータをインデントすることをお勧めします。 – ThisGuyHasTwoThumbs

答えて

0

あなたが実際に機能prepare()を使用してのポイントを逃している、あなたは、クエリが実際にいるかどうかを確認する必要がありますすべての結果を返す。..

<?php 
$options  = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' 
); 
$blog_post_id = !empty($_POST['blog_post_id']) ? $_POST['blog_post_id'] : ''; 

$pdo  = new PDO("mysql:dbname=db;host=localhost", "username", "password", $options); 
$statement = $pdo->prepare("SELECT * FROM comment WHERE blog_post_id = ?"); 
$statement->execute([$blog_post_id]); 
$results = $statement->fetchAll(PDO::FETCH_ASSOC); 

$json = array(); 

if (count($results) > 0) { 
    foreach ($results as $row) { 
     $json[] = array(
      'id' => $row['blog_post_id'], 
      'Field' => $row['Column'], 
      'AnotherField' => $row['AnotherColumn'], 
      'AnotherField1' => $row['AnotherColumn1'], 
      'ETC' => $row['AnotherColumnName'] 
     ); 
    } 

    echo json_encode($json); 
} else { 

    echo "no data found"; 
} 

?> 
+0

blog_post_idに値1を設定すると、クエリから結果が返されます。 –

+0

ユーザが1または2を入力した場合、 –

+0

あなたは2でIDを持っていますか? –

0

あなたがそうのような変数バインディングを実行する必要があります。

$pdo=new PDO("mysql:dbname=db;host=localhost","username","password", $options); 
$statement=$pdo->prepare("SELECT * FROM comment WHERE blog_post_id = :blog_post_id"); 
$statement->execute(['blog_post_id' => $blog_post_id]); 

これにより、ここで説明する第1レベルのSQLインジェクションも防止されます。Are PDO prepared statements sufficient to prevent SQL injection?

関連する問題