2012-06-13 29 views
-1

我只是想知道,在使用mysqli插入數據到數據庫時,如果這是下面最好的方法或者有更好的方法嗎?使用mysqli時插入方法是否正確

$insert = array(); 

    for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; ++$i) 
    { 
    $insert[] = "'". mysqli_real_escape_string($_SESSION['id']) . ($n == 1 ? '' : $i) . "','". mysqli_real_escape_string($_SESSION['timeChosen']) ."','". mysqli_real_escape_string(date("Y-m-d", strtotime($_SESSION['dateChosen']))) ."' 
,'". mysqli_real_escape_string($_SESSION['textWeight']) ."','". mysqli_real_escape_string($time) ."','". mysqli_real_escape_string($_SESSION['textMarks']) ."' 
,'". mysqli_real_escape_string($_SESSION['module']) ."','". mysqli_real_escape_string($teacherid) ."','". mysqli_real_escape_string($_SESSION['rooms']) ."'"; 
    } 

    $insertsql = "INSERT INTO Session (SessionId, SessionTime, SessionDate, SessionWeight, SessionDuration, TotalMarks, ModuleId, TeacherId, Room) 
    VALUES (" . implode('), (', $insert) . ")"; 

$sqlstmt=$mysqli->prepare($insertsql); 

$sqlstmt->execute(); 
+6

您沒有使用準備好的語句......你還在逃避手動輸入。 – nickb

+0

我不是準備好的語句的粉絲,但它使代碼更具可讀性! – powtac

+0

有人可以展示一個使用準備語句插入的小例子嗎? – user1394925

回答

0

使用預準備語句的要點是避免做一半你正在做的工作。基本思想是,您只需創建基本查詢,準備好並告訴它將使用的變量名稱而不是佔位符,然後完成變量的所有工作。

你的代碼應該是如下:

$insertsql = "INSERT INTO Session (SessionId, SessionTime, SessionDate, SessionWeight, SessionDuration, TotalMarks, ModuleId, TeacherId, Room) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); 
$insert = $mysqli->prepare($insertsql); 

$insert->bind_params("sssssssss", $sessid, $_SESSION['timeChosen'], $sessdate, 
        $_SESSION['textWeight'], $time, $_SESSION['textMarks'], 
        $_SESSION['module'], $teacherid, $_SESSION['rooms']); 

for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; ++$i) { 
    $sessid = $_SESSION['id'] . ($n == 1 ? '' : $i); 
    $sessdate = date("Y-m-d", strtotime($_SESSION['dateChosen'])); 

    $insert->execute(); 
} 

$insert->close(); /* free resources */ 
0

這是最好使用PDO,以及您bind你的價值觀使用prepared查詢。如果你有很多值要填寫,那麼你可以使用基於位置的佔位符而不是基於名稱的佔位符。

<?php 
// connect to your database 
$pdo = new PDO('mysql:host=localhost;dbname=mydatabase', "username", "password"); 

// fill in the array, just one after the other since the placeholders will be numbered from 1 to ->count($insert) 

$insert = array(); 

for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; ++$i){ 
    $insert[] = $_SESSION['id'] . ($n == 1 ? '' : $i); 
    $insert[] = $_SESSION['timeChosen']; 
    $insert[] = date("Y-m-d", strtotime($_SESSION['dateChosen'])); 
    $insert[] = $_SESSION['textWeight']; 
    $insert[] = $time; 
    $insert[] = $_SESSION['textMarks']; 
    $insert[] = $_SESSION['module']; 
    $insert[] = $teacherid; 
    $insert[] = $_SESSION['rooms']; 
} 


$query = $pdo->prepare('INSERT INTO Session 
     (SessionId, SessionTime, SessionDate, SessionWeight, 
      SessionDuration, TotalMarks, ModuleId, TeacherId, Room) 
      VALUES' . 
      //repeat the 9 placeholders for $_SESSION['sessionNum'] and cut of the trailing , 
      substr(str_repeat('(?,?,?,?,?,?,?,?,?),',$_SESSION['sessionNum']),0,-1)); 

// now we bind the placeholder with the corresponding value in the array 
for($i = 0;$i < count($insert);$i++){ 
    $query->bindParam(($i + 1),$insert[$i]); 
} 
// finally we execute the query 
$query->execute(); 

就是這樣。 (我從內存中寫道,沒有測試過,但是對於php -l,但是你得到了一般的想法,而且我很確定它會工作);)