2017-07-30 18 views
1

私は自分のSQLデータを保護する経験は全くありません。私は準備されたステートメントを使用してWebサービスに対するインジェクション攻撃を防止しようとしています。私はいくつかのチュートリアルを続けましたが、私が実装したそれぞれが私のPHPスクリプトを殺しました。どのように私はこのクエリを保護することができますか?私はこのコードが動作しない理由は本当にわからないんだけどMySQL作成済みステートメントの作成

$value = (integer)$_GET["name"]; 
$sql = $dbConnection->prepare('SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = ?'); 
$sql->bind_param('i', $value); 

$sql->execute(); 

$result = $sql->get_result(); 

$rows = array(); 

if ($result->num_rows > 0) { 
     // output data of each row 
     while($r = mysqli_fetch_assoc($result)) { 
     $rows[] = $r; 
     } 
} 

$value = (integer)$_GET["name"]; 
$sql = "SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = {$value}"; 

$result = $conn->query($sql); 

$rows = array(); 

if ($result->num_rows > 0) { 
     // output data of each row 
     while($r = mysqli_fetch_assoc($result)) { 
     $rows[] = $r; 
     } 
    } 

は、ここに私の試みです。 MySQLiを

$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

// prepare and bind 
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)"); 
$stmt->bind_param("ss", $username, $email); 

// set parameters and execute 
$username= "John"; 
$email = "[email protected]"; 
$stmt->execute(); 

$username= "Mary"; 
$email = "[email protected]"; 
$stmt->execute(); 

echo "New records created successfully"; 

$stmt->close(); 
$conn->close(); 

PHPのヒントやトリックと

+1

これまでのプリペアドステートメントを実行する時、あなたの最高の試みを示したので、我々はそれがあなたのPHPスクリプト – BeetleJuice

+0

は、いくつかのアドバイスのために、このページをチェックしてください殺す理由を把握することができますしてください。http://php.net/manual/ ja/mysqli.prepare.php。何か問題があれば、あなたの質問を更新するエラーを投稿してください。 –

+0

手続き型とオブジェクト指向のスタイルのmysqli呼び出しを混在させるのはなぜですか? –

答えて

0

結果をバインドする必要があります。コードは以下のとおりです。試してみてください。私のコードに構文上の問題がないかどうか確認してください。それ以外の場合は動作します。

$value = (integer)$_GET["name"]; 
$sql = $dbConnection->prepare('SELECT 'coordinates', 'center' , 'content_string' FROM Regions WHERE `id` = ?'); 
$sql->bind_param('i', $value); 
$sql->execute(); 
$sql->bind_result($coordinates, $center, $content_string) 

while($sql->fetch()) 
{ 
    echo $coordinates; 
    echo $center; 
    echo $content_string; 
} 
+0

残念ながら、このコードは機能しません。私は朝のエラーログを見ていきます。 – taurus

関連する問題