2015-04-15 49 views
-1

我從一個研究所學到了PHP,但他們教會了我將PHP插入數據庫的舊語法和技巧。當我在網上搜索時發現它不推薦使用,並且不會在將來的PHP版本中使用。我想了解將數據插入數據庫的新技術。我給你舉例說明我現在在做什麼,它對我來說工作正常,但我想用準備好的語句和所有可能的技術插入數據。PHP舊語法問題

HTML:

<form method="post" action="do_submit.php"/> 
    Name:<input type="text" name="name" id="name"/> 
    Class:<input type="text" name="class" id="class"/> 
    Section:<input type="text" name="section" id="section"/> 
    Roll Number:<input type="text" name="roll" id="roll"/> 
    Registration Number:<input type="text" name="reg" id="reg"/> 
    <input type="submit"/> 
    </form> 

do_submit.php:

 <?php 

    include 'dbconnect.php'; 

    $name=$_POST['name']; 
    $class=$_POST['class']; 
    $section=$_POST['section']; 
    $roll=$_POST['roll']; 
    $reg=$_POST['reg']; 


    $sql = mysql_query("INSERT INTO `school`.`students` (`Name`, `Class`, `Section`,`Roll_No`, `Reg_No`) 
    VALUES ('$name', '$class', '$section', '$roll','$reg');") or die("SELECT Error: ".mysql_error()); 
      if($sql) 

      { 
       $myURL = 'success.php?sType=insert'; 
       header('Location: '.$myURL); 
       exit; 
      } 

    else 
      echo "Try again!"; 


    ?> 

任何人都可以請引導我,示例代碼,使我瞭解到更被黑客獲得新技術。

+1

給看看[PDO](http://php.net/manual/en/book.pdo.php),並嘗試使用準備語句已經更安全 –

+0

可能重複的[我怎樣才能防止SQL注入PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php ) – andrewsi

回答

0
<?php 

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

$name=$_POST['name']; 
$class=$_POST['class']; 
$section=$_POST['section']; 
$roll=$_POST['roll']; 
$reg=$_POST['reg']; 

$stmt = $conn->prepare("INSERT INTO `school`.`students` (`Name`, `Class`, `Section`,`Roll_No`, `Reg_No`) 
VALUES (?, ?, ?, ?, ?);"); 
$stmt->bind_param("sssss", $name, $class, $section, $roll, $reg); 
     if($stmt->execute() === true) 

     { 
      $myURL = 'success.php?sType=insert'; 
      header('Location: '.$myURL); 
      exit; 
     } 

else 
     echo "Try again!"; 


?> 
+0

我想指出他想看看準備好的發言稿。 –

+0

好的發現 - 謝謝!更新了答案。 –

+0

@crystal謝謝你的幫助。你可以告訴新的技術在變量中存儲值。我認爲我在谷歌某個地方有了一個新的方法 – Raj

0

這是一個基本的輪廓:

// 2. Prepare 
$sql = "SELECT id, familyname FROM familymembers WHERE familyname = ?"; 

$stmt = $conn->prepare($sql); 

if(!$stmt) { 
    die("Prepare failed: (" . $conn->errno . ") " . $conn->error); 
} else { 
    echo ("<p>Prepare succeeded</p>"); 
} 

// 3. Bind params 
// s = string 
// i = integer 
// d = double (float) 
// b = blob (binary data) 

$bind_result = $stmt->bind_param("sssss", $name, $class, $section, $roll,$reg); 

if(!$bind_result) { 
    echo "Binding failed: (" . $stmt->errno . ") " . $stmt->error; 
} else { 
    echo ("<p>Binding succeeded</p>"); 
} 

// 4. Execute 
$execute_result = $stmt->execute(); 

if(!$execute_result) { 
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
} else { 
    echo ("<p>Execute succeeded </p>"); 
} 

// 7. Free results 
$stmt->free_result(); 

// 8. Close statment 
$stmt->close(); 

// 9. Close MySQL connection 
$conn->close();