2017-06-29 6 views
-1

(browseroutput.jpg)mysql_to pdo:私はそれを正しくしましたか?

私はPDOに古いmysql_* from古いチュートリアルを切り替えてイムは右のそれを行うかどうかを知りたいと思いました。 私はmysql_*とPDOを取得しませんでした、彼らはドライバか、データをフェッチするための別のバリエーションですか?

私のコードは動作する必要がありますが、私は初心者のために動作するとは懐疑的です。変更パラメータを$age$wpmの値に応じたが、プリペアドステートメントを使用して結合

$sth = $dbh->prepare('SELECT * FROM ajax_example WHERE sex = ?'); 
$sth->execute(array('male')); 

クエリとパラメーターます(当然):

<?php 
    // New PDO variant 

    try { 
    $user = "user"; 
    $pass = ""; 

    $pdo = new PDO('mysql:host=localhost;dbname=testdb', $user, $pass); 

    //build query 
    $age = $_GET['age']; 
    $sex = $_GET['sex']; 
    $wpm = $_GET['wpm']; 

    $query = "SELECT * FROM ajax_example WHERE sex = '$sex'"; 

    if(is_numeric($age)) 
    $query .= " AND age <= $age"; 

    if(is_numeric($wpm)) 
    $query .= " AND wpm <= $wpm"; 

    $stmt = $pdo->prepare($query); 

    $display_string = "<table>"; 
    $display_string .= "<tr>"; 
    $display_string .= "<th>Name</th>"; 
    $display_string .= "<th>Age</th>"; 
    $display_string .= "<th>Sex</th>"; 
    $display_string .= "<th>WPM</th>"; 
    $display_string .= "</tr>"; 

    $stmt->execute(array('name' => $name)); 

    foreach ($stmt as $row) { 
     $display_string .= "<tr>"; 
     $display_string .= "<td>$row[name]</td>"; 
     $display_string .= "<td>$row[age]</td>"; 
     $display_string .= "<td>$row[sex]</td>"; 
     $display_string .= "<td>$row[wpm]</td>"; 
     $display_string .= "</tr>"; 
    } 

    echo "Query: " . $query . "<br />"; 

    $display_string .= "</table>"; 
    echo $display_string; 
    $dbh = null; 

    } catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
    } 
    ?> 
+0

ここに '$ name'のは何であるのポイントを逃しました? –

+0

私は知っていません..チュートリアルから残っている必要があります..どのように私はそれを改善することができますか? – sinankarateke

+0

これを読んでくださいこのhttps://stackoverflow.com/a/767520/3568847 –

答えて

0

ほとんど正しいYou'weは、あなただけのprepare()

<?php 
// New PDO variant 
try { 
    $user = "user"; 
    $pass = ""; 

    $pdo = new PDO('mysql:host=localhost;dbname=testdb', $user, $pass); 

    //build query 
    $age = intval($_GET['age']); 
    $sex = $_GET['sex']; 
    $wpm = intval($_GET['wpm']); 

    $query = "SELECT * FROM ajax_example WHERE sex = ? AND age <= ? AND wpm <= ?"; 
    $stmt = $pdo->prepare($query); 

    $stmt->execute(array($sex,$age,$wpm)); 

    $results = $stmt->fetchall(); 
    if (count($results > 0)) { 
     echo "<table>"; 
     echo "<tr>"; 
     echo "<th>Name</th>"; 
     echo "<th>Age</th>"; 
     echo "<th>Sex</th>"; 
     echo "<th>WPM</th>"; 
     echo "</tr>"; 
     foreach ($results as $row) { 
      echo "<tr>"; 
      echo "<td>" . $row['name'] . "</td>"; 
      echo "<td>" . $row['age'] . "</td>"; 
      echo "<td>" . $row['sex'] . "</td>"; 
      echo "<td>" . $row['wpm'] . "</td>"; 
      echo "</tr>"; 
     } 
     echo "</table>"; 
    }else{ 

     echo "no results available"; 
    } 
} 
catch (PDOException $e) { 
    echo "Error!: " . $e->getMessage() . "<br/>"; 

} 
?> 
0

あなたは例えば、preparedstatementを使用して?でパラメータを渡す必要がありますSQL Injectionを防ぐのに役立ちます。

関連する問題