2017-02-11 10 views
2

私はPDOを学び、ステートメントを準備しようとします。私はすべてのドキュメントを読んで、いくつか質問があります。私が理解すれば、以下のような場合には不可能であり、準備された陳述は必要ありません。あれは正しいですか?それは十分に安全ですか?PDOは文を準備しました。すべてを選択

try { 
    $conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully <br>"; 

    $sql = "SELECT title_post, subtitle_post 
      FROM en"; 
    $statement = $conn->prepare($sql); 
    $statement->execute(); 

    $rows = $statement->fetchAll(); 
    foreach($rows as $row){ 
     echo $row['title_post'] . '<br>'; 
     echo $row['subtitle_post'] . '<br>'; 
    } 
} 
catch(PDOException $e) { 
    echo "Error: " . $e->getMessage(); 
} 
$conn = null; 
+1

を必要としないで、使用する必要はありませんあなたはmysqliの代わりにmysqlを使用することもできます。 – 131

答えて

1

​​パラメータをエスケープまたは引用する必要を避けるために、パラメータをバインドするための準備文を実行します。また、クエリを複数回繰り返すと、executeもうまく実行されます。

query()は標準SQL文を実行し、SQLインジェクションなどの問題を避けるためにすべてのデータを適切にエスケープする必要があります。

ので、あなたの場合、私はリテラルに基づいてSQLのすべてのコードので、あなたが...脱出するnothigsを持っていて、ユーザーの入力を取らない場合は、prepare()

+0

私は準備ができていません。私の質問は今です:コードをそのまま使用すればいいですか?または、コードの準備と実行行を削除して別のforeachを作成する方が良いでしょうか? – Nrc

+0

代わりにクエリを使用する利点は、本当に本当に本当に本当にminimalunを準備して実行する0 ..あなたは同じコードを10000回repaetする場合もあなたが持っているコードを使用することができます。 – scaisEdge

1

クエリ文字列が定数の場合、悪意のあるSQLを挿入する場所はありません。あなたが指摘したように、準備されたステートメントを使用することは確かに冗長です。

+0

準備された文が必要ない場合でも、今のようにコードを使用できますか? – Nrc

+0

それは少し余裕がありますが、私は、個人的に、それを書き直す気にしませんでした。 – Mureinik

関連する問題