2017-01-02 7 views
0

次のコードがあります。0行が返されたが、データが複数行返されている必要があります。PDOを使用して返された行を確認する

$sql2 = $conn->prepare("SELECT * FROM `tips` WHERE tips = `$tips`"); 

if ($sql2->rowCount() > 0) { 

} else { 

} 

つまり、rowCountは常に0ですが、データベースにデータがあります。

私はなどすべてのエラーを取得していないよ

+4

あなたが最初のクエリを実行する必要があります。ところで


は、私はあなたがPDOを最大限に活用するために使用することをお勧めします。プリペアドステートメントを使用する場合は、値のプレースホルダを使用し、ステートメントを実行するときに値にバインドする必要があります。 – jeroen

+4

'\' $ tips \ ''または '' $ tips''ですか? –

答えて

2

をrowCountを取得するには、事前にクエリを実行する必要があるが、そうする:somw有用な例がありmanual

$sql2=$conn->prepare("SELECT * FROM `tips` WHERE tips = '$tips'"); 
$sql2->execute(); 
if ($sql2->rowCount() > 0){ 

}else{ 

} 

リンク。

$sql2=$conn->prepare("SELECT * FROM `tips` WHERE tips = :tips"); 
$sql2->bindParam(':tips', $tips, PDO::PARAM_INT); // or PDO::PARAM_STR 
$sql2->execute(); 
if ($sql2->rowCount() > 0){ 

}else{ 

} 
+0

(これは非常に単純なクエリであり、bindParamを必要としないため) '$ sql2-> execute([':tips' => $ tips])'または ':tips'を '?' '$ sql2-> execute([$ tips])' – noahnu

+0

@noahnu bindparamは単純なクエリではなく、簡単なクエリではありません。 SQLインジェクションを防止するためのものです。クエリに渡されたパラメータがユーザの入力から来た場合に、そのパラメータをサニタイズするために使用されます。したがって、「シンプルな」クエリであっても、本当に役に立ちます! –

+1

@LelioFaietaこれはまだパラメータがバインドされたプリペアドステートメントです。配列を 'execute()'メソッドに送ることができるので、バインディングが簡単です。ところで、あなたはまだ名前付きパラメータを使うことができます... – jeroen

関連する問題