2017-03-03 93 views
1

嘿傢伙即時嘗試從(甲骨文)fetch_array傳遞一些數據到一個變量數組,然後使用該數組數據來檢查數據是否存在於MySQL數據庫並創建任何目前不存在的行..這就是我迄今爲止。從數組中的數據創建新的數據庫行?

問題是它的唯一檢查/創建數組1條目並且不檢查/創建整個數組數據。我想我會需要使用一個for循環來處理所有的陣列數據同時

<?php 




$conn = oci_connect('asdsdfsf'); 
$req_number = array(); 

if (!$conn) { 
    $e = oci_error(); 
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); 
} 

$stid = oci_parse($conn, " SELECT WR.REQST_NO       
          FROM DEE_PRD.WORK_REQST WR      
          WHERE WR.WORK_REQST_STATUS_CD = 'PLAN' AND WR.DEPT_CD ='ISNG'  

          "); 
oci_execute($stid); 



while (($row = oci_fetch_array($stid, OCI_BOTH+OCI_RETURN_NULLS)) != false) { 
    // Use the uppercase column names for the associative array indices 

     $req_number[]= $row['REQST_NO']; 


} 


oci_free_statement($stid); 
oci_close($conn); 


//MYSQL 
//Connection Variables 
//connect to MYSQL 

$con = mysqli_connect($servername,$username,$password,$dbname); 
if (!$con) 
    { 
    die('Could not connect: ' . mysqli_error()); 
    } 
     // lets check if this site already exists in DB 
     $result = mysqli_query($con," 

           SELECT EXISTS(SELECT 1 FROM wr_info WHERE REQST_NO = '$req_number') AS mycheck; 

           "); 

     while($row = mysqli_fetch_array($result)) 
      { 
        if ($row['mycheck'] == "0") // IF site doesnt exists lets add it to the MYSQL DB 
        { 
         $sql = "INSERT INTO wr_info (REQST_NO)VALUES ('$req_number[0]')"; 

         if (mysqli_query($con, $sql)) { 
          $created = $req_number." Site Created Successfully"; 
         } else { 
          echo "Error: " . $sql . "<br>" . mysqli_error($con); 
         } 
        }else{ // if site is there lets get some variables if they are present... 

          $result = mysqli_query($con," 
                  SELECT * 
                  FROM wr_info 
                  WHERE REQST_NO = '$req_number[0]' 
                 "); 

          while($row = mysqli_fetch_array($result)) 
          { 

         $do some stuff 

          } 

         } 
      } 
mysqli_close($con); 

?> 
+0

你忘了描述這個問題。 – David

+0

好點*編輯 – DJRCB

回答

0

您創建一個數組:

$req_number = array(); 

環比記錄值分配給數組:

while (($row = oci_fetch_array($stid, OCI_BOTH+OCI_RETURN_NULLS)) != false) { 
    $req_number[]= $row['REQST_NO']; 
} 

但是,然後永遠不會循環該數組。相反,你只引用第一個記錄數組中:

$sql = "INSERT INTO wr_info (REQST_NO)VALUES ('$req_number[0]')"; 
// etc. 

注:有數組中的元素,而不是一兩個,你直接引用數組本身($req_number地方)( $req_number[0]),這很可能是一個錯誤,您需要更正這些錯誤另請參見:您應該使用查詢參數和預準備語句習慣於通過連接值構建SQL代碼是一種等待發生的SQL注入漏洞)

而不是僅僅引用第一個值在數組中,遍歷數組。類似這樣的:

for($i = 0; $i < count($req_number); $i++) { 

    // The code which uses $req_number, but 
    // referencing each value: $req_number[$i] 

} 
+0

感謝您的幫助!你可以詳細說明一下:「你應該使用查詢參數和準備好的語句,像這樣連接值來構建SQL代碼是一個等待發生的SQL注入漏洞」 – DJRCB

+0

@DJRCB:這些是開始的好地方: http://php.net/manual/en/security.database.sql-injection.php http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – David